標籤:

如何用 vim 的插件開發?有什麼實際中的技巧?

我現在安裝了LookupFile、MiniBufExplorer、NerdTree 和TagList

配合vim的快捷鍵用起來確實很方便,而且超級省內存

但是我一直有個疑問:

因為這些插件是相互獨立的

比如我在MiniBufExplorer切換文件或者在LookupFile搜索文件

NerdTree卻沒辦法切換到我已經打開的文件的路徑

而且LookupFile每次打開都要設置用了哪個filenametage

雖然都是細節,但感覺不是很方便

用vim開發的人也會遇到這些情況么?實際開發中是怎麼用這些插件的?


我用 gvim 做了一個股票操作界面

做這個界面,用到了差不多所有 Vim 插件的關鍵功能!按鍵映射、自定義命令、語法定義、python 擴展!可以動態載入執行 py 腳本,可以畫股票圖,可以執行盤後分析提取,可以實盤監控行情,可以手工下單交易,可以自動執行預設交易指令!!!

這是我寫過的最複雜最深度定製的一個插件!整個 股票分析交易系統 都寫成了一個 Vim 插件!不但跟其它插件相配合,還跟前台 windows 機器配合!哇哈哈哈 ~!!!

詳情在我的博客: 基於 gvim 的股票操作界面


沒什麼技巧。要說經驗的話:

1. 把所有 usr_* 開頭的文檔認真讀一遍

2. 把所有其它文檔通讀一遍

3. 每安裝一個插件,把它的文檔通讀一遍

附. 加入 vim-cn 郵件列表(位於 Google Groups 上)或者 vim-cn XMPP/gtalk 討論群(地址: test@vim-cn.com,請無視用戶名部分的英文意義……)


大家都用 exvim/main · GitHub ((-_-)/)

Vim 插件開發我一般推薦入門的人三點:

1. Vim 腳本的學習, 也就是 :help scripts. 這裡主要學習基本語法, api, 就和你學習其他語言思路是一樣的.

2. Vim 的腳本載入順序. 這是 Vim 文檔最操蛋的部分, 看完後你還是對載入順序很暈. 所以我特別推薦我只做的一份 repo: exvim/test-loading · GitHub . 讀完這個 repo 的 readme 以後你就能夠秒懂載入規則, 然後就明白 vim 的各個插件腳本到底要放到哪裡了.

3. Vim 事件, 也就是 :help event. 瀏覽一遍所有事件, 你就明白怎麼利用腳本響應各個事件了. 這就和你做所有的 GUI 交互程序定製事件是一個道理.

學習完這三點, 你就已經是一個合格的 Vim 插件開發者了. 這三點其實也適用於其他的互動式應用開發環境.


NerdTree卻沒辦法切換到我已經打開的文件的路徑

這是一個切換CWD的需求。你可以在MiniBufExplorer或者LookupFile中打開文件後,多執行一條命令:silent exec "cd" . expand("%:p:h")

而且LookupFile每次打開都要設置用了哪個filenametage

我也曾經有過類似問題,對於不同的項目,不僅僅是要打開filenametag,還有ctags(用於補全),cscope,efm等等。最後的辦法是用
bash腳本生成上面的tag的同時,格式化並複製一份workspace.vim或者project.vim(按自己喜好命名)到對應項目的頂層目錄。
然後在.vimrc中自動尋找並載入workspace。這樣不論是進入哪個項目,乃至哪一級目錄,都可以自動配置這些東東。

關於如何組合這些相互獨立的插件,有兩種思路:

1. 修改這些插件,加入自己需要的功能

2. 在外圍做一些wrapper比如快捷鍵之類的,加入自己需要的功能

個人傾向第二種,因為我是懶人,夠用就好。


vim插件很多,但我常用的不是很多,用著順就可以了,但要提高效率還是要熟練VIM的使用技巧的,像簡單的移動、刪除等。我是學C開發的


我個人覺得用 vim 需要在 *nix 環境下,windows 下我覺得用起來很彆扭,就說啟動/關閉 vim(gvim),就很麻煩和彆扭。再說脫離了 shell 環境,我感覺 vim 在切換編輯文件時,都很不順手了。

vim 的技巧就是用!用!用!基本上我學到的 vim 操作都是 vim 手冊上介紹的。

引用一下 「vim用戶手冊中文版.pdf」裡面的 譯者前言

不要試圖從本手冊中去獲取什麼知識,使用Vim更多的是一種技能而

不是一種知識,Vim的學習需要的更多的不是頭腦而是雙手,經常按書中

的指示進行示例性的操作,在學習Vim眾多精緻的技巧時,不要貪圖一下

子全都掌握,最好是看一條技巧後,馬上在編輯器上進行操作,這樣在以

後實際的編輯操作時你的手指就會建立一種自然的反應而不是由頭腦來搜

索該使用哪一條操作技巧。建議讀者不動手來不讀書。如果手邊沒有一

個合適的Vim編輯器環境可供操練,那麼建議讀者還是不要在這裡浪費時

間。

具體而言,我覺得這個看你的實際需求吧,不同的開發需要不同的快捷鍵和不同的插件。

我做的編程一直是 server 開發,不需要界面,和文字打交道就行了。所以 vim 用起來非常順手和高效。

在使用 vim 之前,我主要使用的是 notepad++,接觸 vim 後就離不開了,停不下來,再也沒有用其他編輯器開發過程序!

最初使用 vim 是因為開發伺服器是 aix,我們通過類似 xshell 之類的終端模擬器連接上去的,只有 vi/vim,為了提高生產效率,邊用邊學習 「vim用戶手冊中文版71.pdf」,從只會 hjkl,到融會貫通,雖不敢說完全掌握 vim 各種操作,但是編輯時需要的各種操作我有自信說沒有我不會的。這個過程中手冊翻來覆去看了很多遍,遇到一個想要的操作又不會時就去翻翻,時間長了,就成了習慣。所謂的技巧就不是技巧了。

翻手冊過程中,根據手冊配置了符合自己需求的 .vimrc 配置,這段時間主要用的 c 作為開發語言,我需要的功能主要有 函數定義跳轉,函數調用查詢,代碼高亮等,所以需要 cscope、taglist 就行了,基本上就這兩個插件。

後面學習 python,使用 python 開發軟體時,加了python-syntax;為了輔助觀看是否縮進到位了,加了 indentLine;為了函數定義的跳轉加了 jedi-vim。

可以看看 無插件Vim編程技巧 這篇文章。不過說一千道一萬,在適當的環境下,用 vim 來完成合適的工作才是使用 vim 的技巧。


我有寫過一個 VIM Plugin 用於訪問 http://Fanfou.com 的...直接使用 Fanfou API 支持 OAuth 認證.

  • Plugin 的地址:Vim-Fanfou

  • Plugin 的代碼: xiongjia/vim-fanfou · GitHub

  • Plugin 的一些知識: vim-fanfou

多看別人寫的插件,如果是使用長久的插件有很多細節設置的。

先讀他們文檔,比如 "NERDTree 切換到我已經打開的文件的路徑" 你可以看看 :help NERDTreeChDirMode .

我覺得 NERDTreeChDirMode = 2 就是可以切換路徑的. 不能滿足你需求的話也可以用 :NERDTree /path 來直接打開路徑. 拿到當前 buffer 路徑可以用 expand("%:p:h") 。

感覺重要的還是多看 Help 文檔. 如果對 VIM 插件本身有興趣也可以看看或者改改別人寫的 VIM 腳本.


我也是自己寫了個小插件解決代碼格式化和修改標籤這種小問題。

感覺插件不好使自己寫不就行了么。


c語言開發,只用了cscope taglist minibufexplorer。


牛逼


推薦閱讀:

如何使用 Vim ?
如何在 Windows 下使用 Vim 的 YouCompleteMe 插件?
如何將 Vim 剪貼板裡面的東西粘貼到 Vim 之外的地方?
Sublime Text 會取代 vim 或 emacs 嗎?
有哪些好用到爆的vim插件?

TAG:Vim |