登入  |  English
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
技術專欄 十個必用的 Vim Plugin

十個必用的 Vim Plugin

The NERD Tree

    操作 Vim 時,通常都在 Terminal 底下作用,無法像一般的 GUI
    應用程式可以以樹狀目錄來瀏覽檔案。 The NERD Tree
    是一將檔案目錄以文字模式方式繪製出來的 Plugin。讓使用者可以不必跳出 Vim
    編輯器 而可進行檔案目錄的瀏覽、開啟等動作。新版的 NERD Tree
    還另外支援了書籤 (Bookmark) 功能,使用者可將路徑節點存成書籤,以便下次載入時
    直接回到該路徑上。

※ 安裝

    將下載回來的 zip 檔解壓縮之後,使用 rsync 將目錄同步複製到 ~/.vim 底下。
    複製完,NERD_tree.vim 檔案應該要在 ~/.vim/plugin/ 裡頭。

※ 使用

    :NERDTree [path|bookmark]

        可直接以 NERD Tree 開啟一路徑,或一書籤。

    :NERDTreeToggle [path|bookmark]
       
        同上,但若 NERD Tree 已經被開啟,則會自動關閉開 NERDTree 。

        通常可自己在 .vimrc 內 map 到e 的快捷鍵:

            nmape  :NERDTreeToggle

        如此,按下 \e 即可將 NERD Tree 開啟或關閉。

    :NERDTreeMirror

        此指令用於分享一個已經存在的 NERD Tree Buffer,
        假設於一分頁中已經開啟了 NERD Tree ,那麼可在另外一個分頁中
        將前一分頁的 NERD Tree Buffer 同步開啟於目前分頁。

    :NERDTreeFind
       
        開啟 NERD Tree 並且找尋目前編輯的檔案。
        若找到目前檔案則會自動將游標位置放至於該檔案節點上。

※ NERDTree 瀏覽操作

    如同操作一般的 Vim 文字檔案一樣,所有的 motion 指令都可使用。

    於資料夾節點上:

        o    - 展開資料夾節點
        C-j  - 跳至下一節點
        C-k  - 跳至上一節點

    於檔案節點:

        o     - 開啟檔案
        - 開於水平分割視窗
        t     - 開於分頁
        T     - 開於分頁 (背景)

    其他詳細資訊可參考 :help NERDTree.txt

Taglist

    Taglist plugin 可使用 ctags 來產生程式碼的變數、函數、類別、標頭檔等等資訊的索引。
    並且可以左邊開啟分割視窗,將這些資訊分類別顯示出來,也可在 Taglist Buffer 內直接
    跳躍至該項目定義的位置。

※ 安裝

    同 NERDTree 安裝方式,安裝完,taglist.vim 應該要在 ~/.vim/plugin/ 內。

    同時你需要啟用 filetype 功能,請在 ~/.vimrc 內加上:

        filetype on

    來啟用 filetype 的機制。

    另外系統需要安裝 ctags :

    於 Debian, Ubuntu 平台,可使用 apt-get 安裝 ctags 套件:

        $ sudo apt-get install ctags

    於 Mac 底下可使用 MacPorts 安裝 ctags 套件:

        $ sudo port install ctags

※ 使用

    :TlistToggle

        對目前檔案使用 ctags 產生標籤檔 (tag file),並且開啟/關閉 TagList 視窗。

    :TlistAddFiles {file(s)} [file(s) ...]

        加入其他檔案的索引到目前的 TagList 視窗。

    :TlistAddFilesRecursive {directory} [ {pattern} ]

        同上,不過可對一目錄底下的所有檔案做索引。

    :TlistSessionSave {filename}

        可將目前 TagList 的資訊存到一特定檔案內,以便於下次開啟 Vim 時載入回來。

    :TlistSessionLoad {filename}

        將 Session 檔案載入回來。

    :TlistUpdate

        更新 Tag 資訊

    詳細資訊請參考 :help taglist.txt

SnipMate

    為模仿 TextMate 一自動補完程式碼的功能而實做的 plugin。在 SnipMate 之前為
    SnippetsEmu ,但有 Place Holder 以及和 Autocomplpop 互相衝突的問題,SnipMate 則
    改進了這項問題,並且同名稱的 Place Holder 可以同步內容,也可反向跳躍至上一個 Place
    Holder。

※ 安裝

    同上 plugin 安裝方法,將對應的 Runtime 路徑裡頭的檔案複製到 ~/.vim/ 內。

    另外要注意的是,需要在 ~/.vimrc 內啟用 filetype plugin:

        filetype on
        filetype plugin on

※ 使用

    Snipmate 為不同類型的檔案提供了多種程式碼樣板,在編輯程式時,可以由特定的關鍵字來延展
    該程式碼樣板。

    舉例來說,編輯一 C 程式:

        $ vim test.c

    進入 insert mode ,輸入 "for" ,接著按下 鍵,此時 "for" 會被延展成完整的 for 迴圈
    片段,游標會跳至第一個 place holder ,輸入文字後,可按下 跳至下一個 place holder。

    Snippet 的樣板可在 ~/.vim/snippets 內找到,該樣板檔案名稱是以檔案類型作為區別,例如:
    c.snippets , java.snippets , javascript.snippets

    你也可以延伸自訂自己的 Snippet 樣板,舉例來說,為 C 程式碼撰寫樣板,可寫:

        c-ext.snippets
        c-cairo.snippets
        c-x11.snippets

    那麼在編輯 C 程式碼時,這些 Snippet 都會被自動載入。

FuzzyFinder

    FuzzyFinder plugin 提供了一個快速搜尋檔案、Buffer、書籤、指令、標籤的一個介面。
    搜尋時,可以即時預覽搜尋結果,並且支援 wildcard 的模糊搜尋

※ 安裝

    同上 plugin 安裝方法,將對應的 Runtime 路徑裡頭的檔案複製到 ~/.vim/ 內。

※ 使用

    FuzzyFinder 提供下列命令:

        FufBuffer      -  Buffer mode (fuf-buffer-mode)
        FufFile        -  File mode (fuf-file-mode)
        FufDir         -  Directory mode (fuf-dir-mode)
        FufMruFile     -  MRU-File mode (fuf-mrufile-mode)
        FufMruCmd      -  MRU-Command mode (fuf-mrucmd-mode)
        FufBookmark    -  Bookmark mode (fuf-bookmark-mode)
        FufTag         -  Tag mode (fuf-tag-mode)
        FufTaggedFile  -  Tagged-File mode (fuf-taggedfile-mode)
        FufJumpList    -  Jump-List mode (fuf-jumplist-mode)
        FufChangeList  -  Change-List mode (fuf-changelist-mode)
        FufQuickfix    -  Quickfix mode (fuf-quickfix-mode)
        FufLine        -  Line mode (fuf-line-mode)
        FufHelp        -  Help mode (fuf-help-mode)

    你可將常用命令 map 至快捷鍵,例如:

        nnoremap ff  :FufFile
        nnorempa fb  :FufBuffer
        ...

    以此類推。

    呼叫 FuzzyFinder 搜尋視窗之後,操作方式如下:

        Ctrl-n , Ctrl-p 上下選擇項目
        Ctrl-j          開啟該檔案到水平分割視窗
        Ctrl-k          開啟該檔案到垂直分割視窗
        Ctrl-l          開啟檔案至新分頁

        Ctrl-\ Ctrl-\   切換搜尋模式 ( fuzzy matching 或 partial matching )

AutoComplPop

    AutoComplPop Plugin 為一可自動偵測目前程式碼的語境,自動呼叫相關對應的補齊函式 (Completion Function)
    而省去手動觸發補齊功能的 Plugin。

    安裝之後,AutoComplPop 就會自動啟用,輸入片段程式碼即可見效。
    需要注意的是,Vim 的版本需要在 7.2 才有支援。

    安裝方式同以上 Plugin 。

NeoComplCache

    大多數補齊函式,需要另外掃描外部檔案以獲得補齊資訊,耗費的時間依情況而定,但大多數補齊資訊都
    大同小異,因此 NeoComplCache Plugin 針對特定的樣式 (Pattern) 所回傳的補齊資訊做了快取,
    以增加補齊速度。

    安裝方式同以上 Plugin 。

Fakeclip

    為了解決於 Terminal 以及 GUI 之間複製貼上的問題,FakeClip
    利用了虛擬的暫存器來解決多種平台上 Termianl 複製文字至剪貼簿的問題。

    同時支援:

        Cygwin
        Mac OS X
        X Window System (使用 xclip)

BufExplorer

    Vim 缺乏一個良好的 Buffer 管理介面,只能利用簡單的 :buffers , :[n]buf ,
    [n]bufwipe , [n]bufdo 指令來做操作。

    BufExplorer 提供了一個介面將所有 Buffer 的資訊整理出來,你也可透過該介面
    喚回、刪除該 Buffer。

    安裝方式同以上 Plugin。

Surround.vim

    Surround plugin 可針對包含在文字外的括號、引號、XML 標籤等等做快速的修改。

    舉例來說:

    於下字串內,按下 cs"' 時

    "Hello world!"

    可改為:

    'Hello world!'

    此時若按下 cs'

    則可改為

    Hello world!

    Surround plugin 也支援 Visual Mode ,選擇後,可使用大寫 S 對該區塊修改包圍的文字

    安裝方式同以上 Plugin。

GSession.vim

    GSession.vim 是一處理 Vim Session Plugin 。一般建立 Session 可使用
    :mksession [filename] 指令,來將目前所有的分頁、開啟的檔案狀態儲存起來,在下次
    載入 Vim 時可以將狀態喚回。 但缺點就在 Session File 會被存在工作目錄內,
    GSession 可自動將 Session File 集中放置在 ~/.vim/session 內,並且可以是匿名 Session
    ,也就是,你不需要花時間想 Session 的名稱。
   
    存 Session 之後,在同一個路徑開啟 Vim 時便會自己載入 Session,省去輸入指令再去載入的時間。

    若要儲存為命名的 Session ,載入時,也同時支援自動補齊,不需自己記住當時所存的 Session 名稱。

    安裝方式同以上 Plugin。

※ 使用

   ss   建立匿名 global session file

   sS   建立匿名 local session file

   se   刪除目前的 session file

   sE   刪除所有的 session file

   sn   建立命名的 global session file

   sl   建立命名的 local session file

附錄:

    以上 plugin 皆可使用 Vimana 來安裝。
    Vimana 為一可以偵測 vim.org 上 plugin 檔案,來自動安裝 plugin 檔案之模組。

    安裝 Vimana :
       
        使用 cpan 來安裝 Vimana,若是初次使用 cpan,只需要採用預設的 cpan 設定即可。

        $ sudo cpan Vimana

    搜尋 plugin :

        $ vimana s [keyword]

    安裝 plugin :

        $ vimana i [plugin name]

 

◎作者簡介

Cornelius,目前在 AIINK(愛印網),以 Perl 語言開發的 Jifty web framework 從事網站開發相關工作。於 CPAN - Perl 模組典藏網維護多個 Perl 模組,參與 Jifty, SD 等 Perl 相關開放原始碼專案 。主要以 Vim 做為開發工具,著有 cpan.vim , perl-completion.vim , perldoc.vim 等多個 vim 相關 Plugin。 
 Github
 Twitter
 Plurk
 Blog
 Google group




自由軟體鑄造場電子報 : 第 143 期 彈性過人的新 Linux 發行版本 — Toorox

分類: 技術專欄



評論 

 
0 #1 凍仁翔 2012-11-02 11:51
hello,

GSession.vim 的路徑有誤,應為 gsession.vim - global session manager (improved) : vim online: vim.org/.../... 才對 :)

# 註:沒想到是 @c9s 前輩寫的 Vim plugin
 
 
0 #2 洪華超 2012-11-02 11:56
已經修正!
謝謝通知~~
 
 
0 #3 面膜哥 2014-11-17 15:16
有辦法做到Jserv大神在自幹 OS上做到的快速選單的功能嗎?
 
 
+2 #4 c9s 2014-11-17 20:57
行!請看 quickmenu plugin github.com/c9s/quickmenu.vim