IDE/Editor / Python 编程 · 2014/01/03 0

如何使用 python 编写 vim 插件: vim 的 python 接口 – 入门篇

vim 7.3 起开始支持 Python 作为自身脚本执行语言, 同时还支持 Ruby. 本文主要介绍, 如何开始使用 python 编写 vim 脚本.
支持的vim版本为7.4
1. 检测 vim 是否支持 python
指令如下:
:python print "I'm vim."
或者按照vim有长指令简写的习惯:
:py print "I'm vim."
状态栏, 如果可以现实 I’m vim. 那么就表示你的 vim 支持 python 接口

2. 导入 vim 包
指令如下:
:py import vim
这样你就可以使用 vim预置的函数和方法作与vim交互了

3. 第一次交互 – 行操作
这是一个简单的示例, 是使用 vim 第一与编辑区的交互, 状态栏什么的变化不能说是严格意义上的交互.
打开/新建一个文件后进入编辑区使用指令如下:
:py vim.current.line = 'First line from python'
这时你就可以看到, vim 替换了当前行的内容为 “First line from python”, 这时不用急着回复原状, 接下来还会用到这里的内容.

4. 第二次交互 – 执行 vim 命令
这个实例展示的是, 如何使用 python 接口调用 vim 命令, 这个小节里的主角是 vim.command .
接着上面的示例中的 “First line from python” 行, 执行如下指令:
:py vim.command('s/first/Second/gi')
此时, “First line from python” 就会变成 “Second line from python”, 这里的执行效果与直接执行
:s/first/Second/gi
完全一致.

4. 第三次交互 – 获取变量
这个实例展示的是, 如何从 vim 中获取指定变量, 这个小节里的主角是 vim.vars .
执行指令如下:
:py print vim.vars["mapleader"]
或者
:py print vim.eval("mapleader")
就可以获取到 vim 的 map leader 设置的哪个键位或键位组合了

5. 第四次交互 – 获取当前vim设置
这个示例将由多个指令完成, 主角是 options 但是是各个 vim 对象的 options .
分别执行如下指令:
从全局配置获取是否高亮:
:py vim.options["hls"]
从当前窗口配置获取是否显示行号:
:py print vim.current.window.options["nu"]
从当前buffer配置获取tab长度
:py print vim.current.buffer.options["ts"]
尽管可能所有选项都是在 _vimrc 文件配置的, 但是获取的方式可能还是会根据其生效区块不同而采用了不同的获取方式

6. 使用 vim 脚本获取当前是否支持 python 接口
has('python')
可以完成这个判断, 如果支持 python 接口, has(‘python’) 会返回 True

7. 其他说明
a. 其他更进一步的使用方法可以使用 :py print dir(vim) 或者 :py print dir(vim.XXX) 的方式查看其支持的属性, 方法
b. vim 同时还支持 :pyfile 方式调用 python 文件