0 环境
- Windows 11 22H2
- gVim82 (D:/ProgramFiles/Vim)
- Python311 (D:/ProgramFiles/Python311)
- Vundle v0.10.2
阅读本文前,需要先了解前文:
- 《[vim]Python 编写插件学习笔记1 - 开始》
1 Python 与 vimscript 分离
前文编写 vim 插件的方式,是将 Python 代码嵌入到 vimscript 代码中。
而由于 Python 代码的格式问题(Tab 键),将 Python 代码独立出来,更方便 Python 代码的编写,同时也方便模块/单元调试。
以下实现参考自 《MixedMath: Writing a Python Script to be Used in Vim (davidlowryduda.com)》一文实现。
- vimscript
" test.vimlet s:script_dir = fnamemodify(resolve(expand('<sfile>', ':p')), ':h')function! TestVim()python3 << EOF
# python part startimport sys # 必要的引用
import vimscript_dir = vim.eval('s:script_dir')
sys.path.insert(0, script_dir) # 关键的三句,主要是添加 Python 搜索路径import test # 引用test.TestVim2() # 调用# python part end
EOFendfunction
- python
# -*- coding: utf-8 -*-
### test.pydef TestVim2():print("TestVim say hello 2!")
(为了与之前的代码区分,所以改成了 TestVim2,输出消息也进行了修改!)
- 加载
:so %
- 测试
:call TestVim()
补充说明:
加载与测试,一般在先当前 vim 进程加载测试。
但是,由于之前内容有添加 vim 自动加载,所以应该注意代码内容最好有变化,以分区 vim 自动加载的旧版本插件内容。或者,更直接的,先删除/注释掉自动加载插件的配置。
另外,猜想应该是 vim 加载 Python 插件的问题,手动加载命令
:so %
,有时仍会出现调用时,找不到 Python 函数/模块的问题(代码没问题)。此时,重启一下 vim 即可。
2 参考
- Writing Vim plugin in Python (candidtim.github.io)
- How to Write Vim Plugins with Python - DZone
- Learn Vimscript the Hard Way (stevelosh.com)
- MixedMath: Writing a Python Script to be Used in Vim (davidlowryduda.com)
- Vim script for Python Developers · GitHub