Vim是一個強大的文字編輯器。我們在win32平台下用VC寫代碼的時候,常常比較習慣VC給予的一些格式控制和代碼補全功能,而這些功能都是可以在 vim中實現的,並且,已經有前人為我們寫好了外掛程式指令碼,我們只需要非常簡單的設定,就可以迅速的構建出類似VC的C++編譯環境。
Vim的設定檔通常在~/.vimrc中。我們首先可以加入這樣兩句:
syntax on //文法高亮開啟,這樣我們就可以看倒C/C++的關鍵字成為了彩色;
:set cin! //C縮排開啟,這樣vim會自動判斷縮排的設定;
完成這樣的設定後,當我們建立或者開啟vim所能識別的C/C++源檔案的時候,我們就可以看到關鍵字的顏色以及自動的縮排了。
需要指出的一點是,按照Unix來源程式的習慣,我們最好以ASCII編碼來寫程式,而Debian的內部編碼預設是UTF-8。當然,如果我們vim建立 的檔案沒有漢字等其他字元的時候,產生的檔案自動是ASCII編碼的,但是,某些外掛程式,比如vim的c-support外掛程式會自動添加檔案的建立日期,這 樣,因為我們系統預設語言一般是zh_CN,所以就會產生中文的日期顯示。所以,一個解決方案是在運行建立cpp檔案的vim的時候,指定使用的語言,或 者,乾脆做一個alias來簡單使用:
alias cvim='LC_ALL=C vim'
這樣,就可以確保建立的cpp檔案不帶非ASCII字元。
接下來,我們簡單瞭解一下ctags。簡單說,ctags是為許多電腦語言的原始碼檔案做索引,以提供給編輯器(比如我們的vim)使用的。我們先看看ctags的協助:
ctags --help
以下資訊是我們將用到的:
-R Equivalent to --recurse.
--recurse=[yes|no] Recurse into directories supplied on command line [no].
--languages=[+|-]list
Restrict files scanned for tags to those mapped to langauges
specified in the comma-separated 'list'. The list can contain any
built-in or user-defined language [all].
--fields=[+|-]flags
Include selected extension fields (flags: "afmikKlnsStz") [fks].
--extra=[+|-]flags
Include extra tag entries for selected information (flags: "fq").
我們用這樣的命令在源檔案所在的目錄運行:(用樣,我們可以做一個alias,我們最後來討論這個問題)
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
其中參數的含義是:原文出處
--c++-kinds=+p : 為C++檔案增加函數原型的標籤
--fields=+iaS : 在標籤檔案中加入繼承資訊(i)、類成員的存取控制資訊(a)、以及函數的指紋(S)
--extra=+q : 為標籤增加類修飾符。注意,如果沒有此選項,將不能對類成員補全
好了,現在準備知識講完了。我們先實現C++對象用.或者->調用方法的時候自動產生選擇的下拉式功能表。我們需要的外掛程式是OmniCppComplete,在vim官方這裡下載:
http://www.vim.org/scripts/script.php?script_id=1520
下載到的是一個壓縮包,解壓到~/.vim/下相應的目錄就可以了。另外,我們需要在~/.vimrc中開啟裝載外掛程式:
:filetype plugin on
(或許還需要開啟vim對原始碼的識別,不過我是沒有用到,Debian 4.0,如果需要的話,再加上:filetype indent on)
另外,我們關閉vim預設的預覽視窗:
:set completeopt=longest,menu
這樣,當我們建立了對象,用.或者->的時候,就會自動調出類方法的選擇視窗了。
另外一個常見的補全是對函數的補全,也有現成的外掛程式可以用code_complete:
http://www.vim.org/scripts/script.php?script_id=1764
這個安裝就更簡單了,直接把code_complete.vim拷貝到~/.vim/plugin/下面就可以了。
外掛程式的使用方法是,當寫完一個函數,並打上左括弧(之後,按tab鍵就可以看倒函數參數列表了,包括重載的函數。
最後,我們不希望記那麼多參數,希望使用起來簡單一些,我們只需要在bash啟動並執行時候申明我們的兩個alias就可以了。在~/.bashrc中添加:
alias vctags='ctags -R --c++-kinds=+p --fields=+iaS --extra=+q'
alias cvim='LC_ALL=C vim'
關閉終端後重啟動,可以用type查看我們的新命令已經生效了:
lf426@fleet:~$ type vctags
vctags is aliased to `ctags -R --c++-kinds=+p --fields=+iaS --extra=+q'