前言
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),返回結果類型為:
新聞熱點
疑難解答