前言
vim是个伟大的编辑器,不仅在于她特立独行的编辑方式,还在于她强大的扩展能力。然而,vim自身用于写插件的语言vimL功能有很大的局限性,实现功能复杂的插件往往力不从心,而且运行效率也不高。幸好,vim早就想到了这一点,她提供了很多外部语言接口,比如Python,ruby,lua,Perl等,可以很方便的编写vim插件。本文主要介绍如何使用Python编写vim插件。
准备工作
1. 编译vim,使vim支持Python
在编译之前,configure的时候加上--enable-pythoninterp和--enable-python3interp选项,使之分别支持Python2和Python3
编译好之后,可以通过vim --version | grep +python来查看是否已经支持Python,结果中应该包含+python和 +python3,当然也可以编译成只支持Python2或Python3。
现在好多平台都有直接编译好的版本,已经包含Python支持,直接下载就可以了:
2. 如何让Python能正常工作
虽然vim已经支持Python,但是可能:echo has("python")或:echo has("python3")的结果仍是0,说明Python还不能正常工作。
此时需要检查:
例如,可以在vimrc里添加
set pythondll=/Users/yggdroot/.python2.7.6/lib/libpython2.7.so
经此4步,99%能让Python工作起来,剩下的1%就看人品了。
补充一点:
对于neovim,执行
pip2 install --user --upgrade neovimpip3 install --user --upgrade neovim
就可以添加Python2和Python3的支持,具体参见:h provider-python。
从hello world开始
在命令行窗口执行:pyx print("hello world!"),输出“hello world!”,说明Python工作正常,此时我们已经可以使用Python来作为vim的EX命令了。
操作vim像vimL一样容易
怎么用Python来访问vim的信息以及操作vim呢?很简单,vim的Python接口提供了一个叫vim的模块(module)。vim模块是Python和vim沟通的桥梁,通过它,Python可以访问vim的一切信息以及操作vim,就像使用vimL一样。所以写脚本,首先要import vim。
vim模块
vim模块提供了两个非常有用的函数接口:
vim.command(str)
执行vim中的命令str(ex-mode),返回值为None,例如:
:py vim.command("%s//s/+$//g"):py vim.command("set shiftwidth=4"):py vim.command("normal! dd")
vim.eval(str)
求vim表达式str的值,(什么是vim表达式,参见:h expr),返回结果类型为:
新闻热点
疑难解答