1. vim 的安裝
$sudo apt-get install vim vim-scripts vim-doc <br>
其中vim-scripts包含了vim的一些基本插件,包括語法高亮,縮進等等。
vim的中文文檔tar包下載地址: http://sourceforge.net/projects/vimcdoc/files/vimcdoc/
解壓后其中有個doc文件夾, 將其中的內容全部復制到~/.vim/doc, 或者vim安裝目錄下的doc目錄中, 此時vim中的help信息已經是中文的了.
網頁版中文幫助文檔網址http://vimcdoc.sourceforge.net/doc/help.html
首頁就時vim幫助文檔的目錄,閱讀起來更方便有效、更有針對性!
2. vim的配置文件
vim系統的配置文件在 /usr/share/vim, /etc/vim 兩個文件夾下,但是,可以修改 ~/.vimrc 文件和 ~/.vim 目錄來對用戶單獨配置vim。
3. vim的基本配置
"---------------------------------- pathogen 設置------------------------- |
4. 代碼折疊
- 折疊方式foldmethod
vim提供以下6種方法來選定折疊方式:
manual 手工定義折疊
indent 更多的縮進表示更高級別的折疊
expr 用表達式來定義折疊
syntax 用語法高亮來定義折疊
diff 對沒有更改的文本進行折疊
marker 對文中的標志折疊 - 折疊級別foldlevel
‘foldlevel’ 是個數值選項:數字越大則打開的折疊更多。
當 ‘foldlevel’ 為 0 時,所有的折疊關閉。
當 ‘foldlevel’ 為正數時,一些折疊關閉。
當 ‘foldlevel’ 很大時,所有的折疊打開。 -
折疊欄foldcolumn
‘foldcolumn’ 是個數字,它設定了在窗口的邊上表示折疊的欄的寬度。當為0時,沒有折疊欄。最大是12。
一個打開的折疊由一欄來表示,頂端是 ‘-‘,其下方是 ‘|’。這欄在折疊結束的地方結束。當折疊嵌套時,嵌套的折疊出現在被包含的折疊右方一個字符位置。
一個關閉的折疊由 ‘+’ 表示。
當折疊欄太窄而不能顯示所有疊時,顯示一數字來表示嵌套的級別。
在折疊欄點擊鼠標,可以打開和關閉折疊:
(1)點擊 ‘+’ 打開在這行的關閉折疊
(2) 在任何其他非空字符上點擊,關閉這行上的打開折疊
在vim配置文件/home/user/.vimrc中加入如下的配置:"--fold setting--
set foldmethod=syntax " 用語法高亮來定義折疊
set foldlevel=100 " 啟動vim時不要自動折疊代碼
set foldcolumn=5 " 設置折疊欄寬度 -
常用命令
za 打開/關閉在光標下的折疊
zA 循環地打開/關閉光標下的折疊
zo 打開 (open) 在光標下的折疊
zO 循環打開 (Open) 光標下的折疊
zc 關閉 (close) 在光標下的折疊
zC 循環關閉 (Close) 在光標下的所有折疊
zM 關閉所有折疊
zR 打開所有的折疊
5. quickfix 設置
通過quickfix命令集,可以在vim內編譯程序,並且直接跳轉到出錯位置進行修正,
然后接着進行編譯和修正,直到不再出錯為止。在 vim的配置文件~/.vimrc文件中加入如下配置:
"-- QuickFix setting -- |
下面的命令運行 "make" (包括你所給出的參數) 程序並捕捉其運行結果: >
:make {arguments}
如果編譯時出現錯誤,按 ,回到vim界面,看不到出錯信息了!這時,可以運行以下命令
:cw[indow] 打開quickfix窗口來查看出錯信息,它會自動跳到第一處出錯的地方。然后,你可以雙擊出錯某一條出錯信息,vim就會自動跳轉到相應的出錯位置
:cn[ext] 光標移到下一個錯誤所在的行
:cp[revious] 光標移到上一個錯誤所在的行
:cfirst 到第一處錯誤
:clast 到最后一處錯誤
:cc 空間不夠時,Vim 會縮短出錯信息。如果你想查看詳細信息,可以使用此命令
:cl[ist] 列出所有出錯信息的概覽(只有那些含有文件名或行數的錯誤信息會被顯示,需要查看那些並不含文件名或行數的信息可用“:cl[ist]!”命令)
6. ctags配置
ctags 可以建立源碼樹的標簽索引,用於快速定位函數、變量等。
$sudo apt-get install ctags #安裝ctags
$ ctags -R * #建立索引文件
~/.vimrc中對ctgs的使用進行配置
"-------------------------------------ctags設置---------------------------- |
tag命令用法:
Ctrl+] 跳到當前光標下單詞的標簽
Ctrl+O 返回上一個標簽
Ctrl+T 返回上一個標簽
:tag TagName 跳到TagName標簽
以上命令是在當前窗口顯示標簽,當前窗口的文件替代為包標簽的文件,當前窗口光標跳到標簽位置。如果不希望在當前窗口顯示標簽,可以
:stag TagName 新窗口顯示TagName標簽,光標跳到標簽處
Ctrl+W + ] 新窗口顯示當前光標下單詞的標簽,光標跳到標簽處
當一個標簽有多個匹配項時(函數 (或類中的方法) 被多次定義),”:tags” 命令會跳轉到第一處。如果在當前文件中存在匹配,那它將會被首先使用。
可以用這些命令在各匹配的標簽間移動:
:tfirst 到第一個匹配
:[count]tprevious/tp 向前 [count] 個匹配
:[count]tnext/tn 向后 [count] 個匹配
:tlast 到最后一個匹配
或者使用以下命令選擇要跳轉到哪一個
:tselect TagName
輸入以上命令后,vim會為你展示一個選擇列表。然后你可以輸入要跳轉到的匹配代號 (在第一列)。其它列的信息可以讓你知道標簽在何處被定義過。
以下命令將在預覽窗口顯示標簽
:ptag TagName 預覽窗口顯示TagName標簽,光標跳到標簽處
Ctrl+W + } 預覽窗口顯示當前光標下單詞的標簽,光標跳到標簽處
:pclose 關閉預覽窗口
:pedit file.h 在預覽窗口中編輯文件file.h(在編輯頭文件時很有用)
:psearch atoi 查找當前文件和任何包含文件中的單詞並在預覽窗口中顯示匹配,在使用沒有標簽文件的庫函數時十分有用。
5. 管理vim插件 pathogen
通過pathogen,可以管理vim插件。 當自己下載安裝vim插件的時候,也可以在自己的插件子目錄~/.vim下。在~/.vim 子目錄下,設置插件目錄plugin 和文檔目錄doc. 使用手動方式進行拷貝添加:解壓 xxx.zip,將 解壓后的目錄中的 autoload, plugin, doc 目錄中的文件拷貝到 ~/.vim目錄下
對應的autoload, plugin, doc 目錄中去(直接解壓覆蓋安裝即可
)。
或者使用pathogen 插件管理器來管理插件,pathogen在~/.vim/autoload目錄下有 pathogen.vim, 然在.vim目錄下建立
bundle目錄,在bumdle目錄下執行 git clone xxxx.git 獲得插件,即可完成自動安裝。同時,在.vimrc 文件中添加
execute pathogen#effect()
execute pathogen#helptags()
6. vim 自動補全 Onmicpp-Complete
vim的自動補全功能可以通過 Omnicpp-Complete來實現。
在~/.vimrc 配置文件中進行配置:
"-- omnicppcomplete setting -- |
OnmiCppComplete是基於ctags數據庫即tag文件來自動補全的,所以在使用ctags -R 生成tag文件時需要加入其他選項,
才能與OnmiCppComplete配合。
ctags -R —c++-kinds=+p —fields=+iaS —extra=+q .
—c++-kinds=+p : 為C++文件增加函數原型的標簽
—fields=+iaS : 在標簽文件中加入繼承信息(i)、類成員的訪問控制信息(a)、以及函數的指紋(S)
—extra=+q : 為標簽增加類修飾符。注意,如果沒有此選項,將不能對類成員補全
例如,為了添加標准c++的代碼補全。
- 下載c++的源代碼
$sudo apt-get install build-essential (源碼會放在/usr/include/c++ 目錄下)
- 然后生成和omnicppcomplete連接的tags文件
在/usr/include/c++目錄下執行,ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . 生成tags文件
- 在.vimrc 文件中添加
set tags+=/usr/include/c++/tags
注意:在自動補全的點,Vim必須知道可能補全的定義。比如說,在namespace std命名空間下的變量和函數,必須要用using namespace std;暴露出來,否則是不能補全的。
在.cpp文件中還可以,在.h文件中這樣就不是好的做法了。暫時不知道這個問題是由於我自己配置錯誤還是程序沒有實現。
當自動補全下拉窗口彈出后,一些可用的快捷鍵:
Ctrl+P 向前切換成員
Ctrl+N 向后切換成員
Ctrl+E 表示退出下拉窗口, 並退回到原來錄入的文字
Ctrl+Y 表示退出下拉窗口, 並接受當前選項
其他補全方式:
Ctrl+X Ctrl+L 整行補全
Ctrl+X Ctrl+N 根據當前文件里關鍵字補全
Ctrl+X Ctrl+K 根據字典補全
Ctrl+X Ctrl+T 根據同義詞字典補全
Ctrl+X Ctrl+I 根據頭文件內關鍵字補全
Ctrl+X Ctrl+] 根據標簽補全
Ctrl+X Ctrl+F 補全文件名
Ctrl+X Ctrl+D 補全宏定義
Ctrl+X Ctrl+V 補全vim命令
Ctrl+X Ctrl+U 用戶自定義補全方式
Ctrl+X Ctrl+S 拼寫建議
幫助文檔
:help omnicppcomplete
7. 提示函數原型 echo_func
echofunc可以在命令行中提示當前輸入函數的原型。
echofunc下載地址:<http://www.vim.org/scripts/script.php?script_id=1735> 下載完成后,把echofunc.vim文件放到 ~/.vim/plugin
文件夾中
當你在vim插入(insert)模式下緊接着函數名后輸入一個”(“的時候, 這個函數的聲明就會自動顯示在命令行中。如果這個函數有多個聲明,
則可以通過按鍵”Alt+-“和”Alt+=”向前和向后翻頁,
這個兩個鍵可以通過設置g:EchoFuncKeyNext和g:EchoFuncKeyPrev參數來修改。這個插件需要tags文件的支持,
並且在創建tags文件的時候要加選項”—fields=+lS”(OmniCppComplete創建的tag文件也能用),
整個創建tags文件的命令如下:
$ ctags -R —fields=+lS
8. 標簽瀏覽器 TagList
Taglist了列出了當前文件中的所有標簽,宏、變量、函數等。
安裝taglist: 下載taglist 的壓縮包, 解壓縮到 ~/.vim 目錄覆蓋 doc和plugin目錄即可。
配置taglist:
|
9. cscope 設置
Cscope是一個類似於ctags的工具,不過其功能比ctags強大很多。
- 安裝Cscope
$ sudo apt-get install cscope - 在vim配置文件/home/user/.vimrc中加入如下的配置:
if has(“cscope”)
set csprg=/usr/bin/cscope “ 指定用來執行cscope的命令
set csto=0 “ 設置cstag命令查找次序:0先找cscope數據庫再找標簽文件;1先找標簽文件再找cscope數據庫
set cst “ 同時搜索cscope數據庫和標簽文件
set cscopequickfix=s-,c-,d-,i-,t-,e- “ 使用QuickFix窗口來顯示cscope查找結果
set nocsverb
if filereadable(“cscope.out”) “ 若當前目錄下存在cscope數據庫,添加該數據庫到vim
cs add cscope.out
elseif $CSCOPE_DB != “” “ 否則只要環境變量CSCOPE_DB不為空,則添加其指定的數據庫到vim
cs add $CSCOPE_DB
endif
set csverb
endif
map :cs add ./cscope.out . :cs reset
imap :cs add ./cscope.out . :cs reset
“ 將:cs find c等Cscope查找命令映射為c等快捷鍵(按法是先按Ctrl+Shift+-, 然后很快再按下c)
nmap s :cs find s =expand(““) :copen
nmap g :cs find g =expand(““)
nmap d :cs find d =expand(““) :copen
nmap c :cs find c =expand(““) :copen
nmap t :cs find t =expand(““) :copen
nmap e :cs find e =expand(““) :copen
nmap f :cs find f =expand(““)
nmap i :cs find i =expand(““) :copen
-
cscope的主要功能是通過其”find”子命令來實現的
“cscope find”的用法:
cs find c|d|e|f|g|i|s|t name
0 或 s 查找這個 C 符號(可以跳過注釋)
1 或 g 查找這個定義
2 或 d 查找這個函數調用的函數
3 或 c 查找調用過這個函數的函數
4 或 t 查找這個字符串
6 或 e 查找這個 egrep 模式
7 或 f 查找這個文件
8 或 i 查找包含這個文件的文件 -
用法:
<1>、為源碼建立一個cscope數據庫
$ cscope -Rbq
$ ls cscope.*
cscope.in.out cscope.out cscope.po.out
<2>、用vim打開某個源碼文件,末行模式下,輸入“:cs add cscope.out”(該命令已被我們映射為快捷鍵F4),添加cscope數據庫到vim。因為我們已將vim配置為啟動時,自動添加當前目錄下的cscope數據庫,所以你再添加該cscope數據庫時,vim會提示“重復cscope數據庫 未被加入“
<3>、完成前兩步后,現在就可以用“cs find c”等Cscope查找命令查找關鍵字了。我們已在.vimrc中將“cs find c”等Cscope查找命令映射為c等快捷鍵(按法是先按Ctrl+Shift+-, 然后很快按下c)
幫助文檔
:help ifcscop
注意:幫助文檔if_cscop中,快捷鍵映射nmap <C->i :cs find i ^=expand(““)$是有誤的!
比如光標“header.h”上按下i,也就是查找包含“header.h“的文件。但是按照這個映射規則,則是將i映射為cs find i ^header.h$,也就是查找包含“^header.h$“的文件,這顯然不是我們想要的結果。該映射規則應該改成nmap i :cs find i =expand(““)
10. vim 常用快捷鍵
% 跳轉到配對的括號去 |
參考文章:
http://www.cnblogs.com/zhangsf/archive/2013/06/13/3134409.html