1、安裝Vim和Vim基本插件 php
首先安裝好Vim和Vim的基本插件。這些使用apt-get安裝便可: html
lingd@ubuntu:~/arm$sudo apt-get install vim vim-scripts vim-doc python
其中vim-scripts是vim的一些基本插件,包括語法高亮的支持、縮進等等。 linux
vim中文幫助文檔tar包下載地址: c++
http://sourceforge.net/projects/vimcdoc/files/vimcdoc/程序員
解壓後其中有個doc文件夾, 將其中的內容所有複製到~/.vim/doc, 或者vim安裝目錄下的doc目錄中, 此時vim中的help信息已是中文的了. 數據庫
網頁版中文幫助文檔網址http://vimcdoc.sourceforge.net/doc/help.html編程
首頁就時vim幫助文檔的目錄,閱讀起來更方便有效、更有針對性! ubuntu
2、Vim配置文件 vim
Vim強大的功能,其來源基本上就兩個地方:Vim插件以及Vim配置文件。
Vim自己的系統配置文件夾是在/usr/share/vim/和/etc/vim/兩個文件夾下。通常狀況下,咱們不會去改變這兩個文件夾下的配置文件,而是在用戶文件夾/home/user(其中,user爲用戶名,個人用戶名是lingd)下創建本身的配置文件。進入用戶文件夾(/home/user/)以後,用gedit新建一個名叫.vimrc的文件:
lingd@ubuntu:~/arm$ cd ~
lingd@ubuntu:~$ gedit .vimrc
注:使用gedit主要是爲了方便大段大段的文字粘貼!
而後把下面的文字拷貝進這個文件以後保存:
" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages available in Debian.
debian.vim
" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
set nocompatible
" Vim5 and later versions support syntax highlighting. Uncommenting the
" following enables syntax highlighting by default.
if has("syntax")
syntax on " 語法高亮
endif
colorscheme ron " elflord ron peachpuff default 設置配色方案,vim自帶的配色方案保存在/usr/share/vim/vim72/colors目錄下
" detect file type
filetype on
filetype plugin on
" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark
" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"have Vim load indentation rules and plugins according to the detected filetype
filetype plugin indent on
endif
" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
"set ignorecase " 搜索模式裏忽略大小寫
"set smartcase " 若是搜索模式包含大寫字符,不使用 'ignorecase' 選項。只有在輸入搜索模式而且打開 'ignorecase' 選項時纔會使用。
set autowrite " 自動把內容寫回文件: 若是文件被修改過,在每一個 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令時進行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令轉到別的文件時亦然。
set autoindent " 設置自動對齊(縮進):即每行的縮進值與上一行相等;使用 noautoindent 取消設置
"set smartindent " 智能對齊方式
set tabstop=4 " 設置製表符(tab鍵)的寬度
set softtabstop=4 " 設置軟製表符的寬度
set shiftwidth=4 " (自動) 縮進使用的4個空格
set cindent " 使用 C/C++ 語言的自動縮進方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "設置C/C++語言的具體縮進方式
"set backspace=2 " 設置退格鍵可用
set showmatch " 設置匹配模式,顯示匹配的括號
set linebreak " 整詞換行
set whichwrap=b,s,<,>,[,] " 光標從行首和行末時能夠跳到另外一行去
"set hidden " Hide buffers when they are abandoned
set mouse=a " Enable mouse usage (all modes) "使用鼠標
set number " Enable line number "顯示行號
"set previewwindow " 標識預覽窗口
set history=50 " set command history to 50 "歷史記錄50條
"--狀態行設置--
set laststatus=2 " 總顯示最後一個窗口的狀態行;設爲1則窗口數多於一個的時候顯示最後一個窗口的狀態行;0不顯示最後一個窗口的狀態行
set ruler " 標尺,用於顯示光標位置的行號和列號,逗號分隔。每一個窗口都有本身的標尺。若是窗口有狀態行,標尺在那裏顯示。不然,它顯示在屏幕的最後一行上。
"--命令行設置--
set showcmd " 命令行顯示輸入的命令
set showmode " 命令行顯示vim當前模式
"--find setting--
set incsearch " 輸入字符串就顯示匹配點
set hlsearch
注:配置文件中,以單個雙引號開頭的文字爲註釋。
保存文件以後,啓動Vim。此時,Vim已是這種效果了(語法高亮挺漂亮的–這個是由vim-scripts中的插件支持的):
3、ctags安裝與配置
ctags能夠創建源碼樹的標籤索引(標籤就是一個標識符被定義的地方,如函數定義),使程序員在編程時能迅速定位函數、變量、宏定義等位置去查看原形
如下是在ubuntu下ctags的下載安裝和配置過程:
下載並安裝ctags,終端輸入命令
lingd@ubuntu:~/arm$ sudo apt-get install ctags
創建源碼索引,好比我常常須要查閱Linux的內核代碼,而這些代碼放在/home/lingd/arm/linux-2.6.24.7目錄下
那麼在終端進入到該目錄後,輸入命令ctags -R *,你會發現多了一個tags文件,這個就是索引文件
lingd@ubuntu:~/arm$ cd linux-2.6.24.7
lingd@ubuntu:~/arm/linux-2.6.24.7$ ls
arch crypto include kernel mm samples usr
block Documentation init lib net scripts
COPYING drivers ipc MAINTAINERS README security
CREDITS fs Kbuild Makefile REPORTING-BUGS sound
lingd@ubuntu:~/arm/linux-2.6.24.7$ ctags -R *
lingd@ubuntu:~/arm/linux-2.6.24.7$ ls
arch crypto include kernel mm samples tags
block Documentation init lib net scripts usr
COPYING drivers ipc MAINTAINERS README security
CREDITS fs Kbuild Makefile REPORTING-BUGS sound
向vim註冊索引文件tags的路徑,
lingd@ubuntu:~/arm/linux-2.6.24.7$ vi ~/.vimrc
在打開文件的最後添加以下內容(固然,具體路徑根據你本身的狀況)
"--ctags setting--
" 按下F5從新生成tag文件,並更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
set tags=tags
set tags+=./tags "add current directory's generated tags file
set tags+=~/arm/linux-2.6.24.7/tags "add new tags file(剛剛生成tags的路徑,在ctags -R 生成tags文件後,不要將tags移動到別的目錄,不然ctrl+]時,會提示找不到源碼文件)
set tags+=./tags表示在當前工做目錄下搜索tags文件
set tags+=~/arm/linux-2.6.24.7/tags表示在搜尋tags文件的時候,也要搜尋~/arm/linux-2.6.24.7/文件夾下的tags文件。
而後保存並退出vi。這樣,你就能夠用vim在任意地方查看有關Linux的函數原形
------------------------------------
tag命令用法:
Ctrl+] 跳到當前光標下單詞的標籤
Ctrl+O 返回上一個標籤
Ctrl+T 返回上一個標籤
:tag TagName 跳到TagName標籤
以上命令是在當前窗口顯示標籤,當前窗口的文件替代爲包標籤的文件,當前窗口光標跳到標籤位置。若是不但願在當前窗口顯示標籤,可使用如下命令:
:stag TagName 新窗口顯示TagName標籤,光標跳到標籤處
Ctrl+W + ] 新窗口顯示當前光標下單詞的標籤,光標跳到標籤處
當一個標籤有多個匹配項時(函數 (或類中的方法) 被屢次定義),":tags" 命令會跳轉到第一處。若是在當前文件中存在匹配,那它將會被首先使用。
能夠用這些命令在各匹配的標籤間移動:
:tfirst 到第一個匹配
:[count]tprevious 向前 [count] 個匹配
:[count]tnext 向後 [count] 個匹配
:tlast 到最後一個匹配
或者使用如下命令選擇要跳轉到哪個
:tselect TagName
輸入以上命令後,vim會爲你展現一個選擇列表。而後你能夠輸入要跳轉到的匹配代號 (在第一列)。其它列的信息可讓你知道標籤在何處被定義過。
如下命令將在預覽窗口顯示標籤
:ptag TagName 預覽窗口顯示TagName標籤,光標跳到標籤處
Ctrl+W + } 預覽窗口顯示當前光標下單詞的標籤,光標跳到標籤處
:pclose 關閉預覽窗口
:pedit file.h 在預覽窗口中編輯文件file.h(在編輯頭文件時頗有用)
:psearch atoi 查找當前文件和任何包含文件中的單詞並在預覽窗口中顯示匹配,在使用沒有標籤文件的庫函數時十分有用。
最簡單的使用方法舉例
用vi在任意目錄寫一個Test.c文件,內容以下:
int main(void)
{
printf("Hello World!\n");
return 0;
}
寫好後末行模式輸入w保存好(不要退出vi),按Esc回到指令模式,把光標停留在printf上
而後按 Ctrl+W + ],vi會自動跳到Linux系統函數printf()處,這時咱們能查看printf()的原形
查看完了,按Ctrl+o(回到上一個標籤) 就回到原來的地方
4、管理vim插件——vim-addons
經過vim-addons,咱們能夠管理vim插件。咱們在sudo apt-get install vim vim-scripts vim-doc時,通常會自動安裝上vim-addons。若未安裝可經過sudo apt-get install vim-addon-manager手動安裝。安裝完成後,就能夠用vim-addons管理vim插件了。
# 系統中已有的vim-scripts中包含的插件及其狀態:
lingd@ubuntu:~$ vim-addons status
# Name User Status System Status
align removed removed
alternate removed removed
bufexplorer removed removed
calendar removed removed
closetag removed removed
colors sampler pack removed removed
cvsmenu removed removed
debPlugin removed removed
detectindent removed removed
doxygen-toolkit removed removed
editexisting removed removed
enhanced-commentify removed removed
gnupg removed removed
info removed removed
justify removed removed
lbdbq removed removed
markdown-syntax removed removed
matchit removed removed
minibufexplorer installed removed
nerd-commenter removed removed
omnicppcomplete installed removed
po removed removed
project installed removed
python-indent removed removed
secure-modelines removed removed
snippetsEmu removed removed
sokoban removed removed
supertab removed removed
surround removed removed
taglist installed removed
tetris removed removed
utl removed removed
vcscommand removed removed
vimplate removed removed
whatdomain removed removed
winmanager removed removed
xmledit removed removed
上面咱們介紹瞭如何獨立於系統配置文件以外,創建本身的Vim配置文件。當咱們本身下載安裝Vim插件的時候,也能夠另外創建目錄,放置咱們本身的插件。這個目錄通常爲/home/user/.vim,另外還須要創建一個插件子目錄,一個插件文檔子目錄,以上的能夠進入/home/user目錄下經過下面的命令執行:
lingd@ubuntu:~$ mkdir .vim
lingd@ubuntu:~$ cd .vim
lingd@ubuntu:~/.vim$ mkdir plugin
lingd@ubuntu:~/.vim$ mkdir doc
# vim官方插件的安裝,xxxx是要安裝的插件名,以status中顯示的名稱爲準。安裝插件xxxx時使用如下命令(前提是在目錄/home/user/.vim/下創建好了plugin和doc兩個文件夾)
vim-addons install xxxx
關於vim-addons命令的詳細用法,能夠經過"man vim-addons"查看其幫助文檔
5、vim自動補全——OmniCppComplete
vim的自動補全功能可經過其插件OmniCppComplete實現。
安裝OmniCppComplete
lingd@ubuntu:~$ vim-addons install omnicppcomplete
配置OmniCppComplete
在vim配置文件/home/user/.vimrc中加入以下的配置:
"-- omnicppcomplete setting --
" 按下F3自動補全代碼,注意該映射語句後不能有其餘字符,包括tab;不然按下F3會自動補全一些亂碼
imap <F3> <C-X><C-O>
" 按下F2根據頭文件內關鍵字補全
imap <F2> <C-X><C-I>
set completeopt=menu,menuone " 關掉智能補全時的預覽窗口
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
"let OmniCpp_DefaultNamespaces=["std"]
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
(前幾行就是提供了C++中的./->/::等操做符的提示和自動完成)。
OmniCppComplete是基於ctags數據庫即tags文件實現的(基於ctags生成的索引信息來實現自動補全的),因此在ctags -R生成tags時還須要一些額外的選項,這樣生成的tags文件才能與OmniCppComplete配合運做。使用下列命令生成tags文件,就能夠與OmniCppComplete配合運做:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
--c++-kinds=+p : 爲C++文件增長函數原型的標籤
--fields=+iaS : 在標籤文件中加入繼承信息(i)、類成員的訪問控制信息(a)、以及函數的指紋(S)
--extra=+q : 爲標籤增長類修飾符。注意,若是沒有此選項,將不能對類成員補全
# vim自動補全功能的測試
# 爲了測試自動補全功能,咱們先下載C++一份C++標準庫的源代碼。
lingd@ubuntu:~$ sudo apt-get install build-essential
# 而後在/usr/include/c++下就能夠找到標準庫的頭文件了。
lingd@ubuntu:~$ cd /usr/include/c++
lingd@ubuntu:/usr/include/c++$ ls
4.4 4.4.3
# 在此文件夾下生成能與OmniCppComplete配合運做的tags文件
lingd@ubuntu:/usr/include/c++$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
lingd@ubuntu:/usr/include/c++$ ls
4.4 4.4.3 tags
# 在vim的配置文件中以下內容,而後在編程的時候就可使用自動補全功能了。
lingd@ubuntu:/usr/include/c++$ vi ~/.vimrc
set tags+=/usr/include/c++/tags
# 用vi打開前面的Test.c文件,在printf("Hello World!\n")下一行中,輸入pri,而後按下Ctrl+X Ctrl+O,此時vi會彈出一個窗口,全部以pri開頭的tag都會出如今這個窗口中,printf就出如今第6行中
lingd@ubuntu:~$ cd ~
lingd@ubuntu:~$ vim Test.c
注意:在自動補全的點,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
6、提示函數原型echofunc
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
其餘插件說明詳見echofunc.vim
若是你在編譯vim時加上了"+balloon_eval"特性,那麼當你把鼠標放在函數名上的時候會有一個tip窗口彈出, 該窗口中也會有函數的聲明
7、標籤瀏覽器Taglist
Taglist用於列出了當前文件中的全部標籤(宏, 全局變量, 函數名等)
安裝Taglist
lingd@ubuntu:~$ vim-addons install taglist
配置Taglist
在vim配置文件/home/user/.vimrc中加入以下的配置:
"-- Taglist setting --
let Tlist_Ctags_Cmd='ctags' "由於咱們放在環境變量裏,因此能夠直接執行
let Tlist_Use_Right_Window=1 "讓窗口顯示在右邊,0的話就是顯示在左邊
let Tlist_Show_One_File=0 "讓taglist能夠同時展現多個文件的函數列表
let Tlist_File_Fold_Auto_Close=1 "非當前文件,函數列表摺疊隱藏
let Tlist_Exit_OnlyWindow=1 "當taglist是最後一個分割窗口時,自動推出vim
"是否一直處理tags.1:處理;0:不處理
let Tlist_Process_File_Always=1 "實時更新tags
let Tlist_Inc_Winwidth=0
進入vim後用命令":Tlist"打開/關閉taglist窗口
幫助文檔
:help taglist.txt
8、文件瀏覽器和緩衝區管理器WinManager
WinManager用於管理文件瀏覽器和緩衝區(buffer)。2.0以上版本的WinManager還能夠管理其餘IDE類型插件,不過要用戶在插件中增長一些輔助變量和hook來支持WinManager(幫助文檔有相關說明)。
Taglist插件自己就提供了對WinManager的支持,不須要咱們去修改它。這裏,咱們就用WinManager來管理文件瀏覽器netrw和標籤瀏覽器Taglist。netrw是標準的vim插件, 已經隨vim一塊兒安裝進系統裏了, 不須要咱們自行下載安裝。
安裝WinManager
lingd@ubuntu:~$ vim-addons install winmanager
配置WinManager
在vim配置文件/home/user/.vimrc中加入以下的配置:
"-- WinManager setting --
let g:winManagerWindowLayout='FileExplorer|TagList' " 設置咱們要管理的插件
"let g:persistentBehaviour=0 " 若是全部編輯文件都關閉了,退出vim
nmap wm :WMToggle<cr>
經常使用命令
:WMToggle 打開/關閉WinManage,不過咱們在配置文件.vimrc中作了快捷鍵映射,因此直接按wm就能夠打開/關閉WinManage
文件瀏覽器命令(在文件瀏覽器窗口中使用)
<enter>或雙擊 若是光標下是目錄, 則進入該目錄; 若是光標下文件, 則打開該文件
<tab> 若是光標下是目錄, 則進入該目錄; 若是光標下文件, 則在新窗口打開該文件
<F5> 刷新列表
- 返回上一層目錄
c 使瀏覽目錄成爲vim當前工做目錄
d 建立目錄
D 刪除當前光標下的目錄或文件
i 切換顯示方式
R 文件或目錄重命名
s 選擇排序方式
r 反向排序列表
x 定製瀏覽方式, 使用你指定的程序打開該文件
winmanager幫助文檔
:help winmanager
netrw幫助文檔
:help netrw
9、buffer管理器MiniBufferExplorer
MiniBufferExplorer用於瀏覽和管理buffer,若是隻打開一個文件,是不會顯示在屏幕上的,而打開多個文件以後,會自動出如今屏幕上。vim也有自帶的buffer管理工具,不過只有:ls, :bnext, :bdelete 等的命令, 既很差用, 又不直觀.
關於vim緩衝區(buffer)和窗口的概念(詳見:help windows)
"緩衝區" 是一塊內存區域,裏面存儲着正在編輯的文件。若是沒有把緩衝區裏的文件存盤,那麼原始文件不會被更改。
"窗口" 被用來查看緩衝區裏的內容。你能夠用多個窗口觀察同一個緩衝區,也能夠用多個窗口觀察不一樣的緩衝區。
"屏幕" Vim 所用的整個工做區域,能夠是一個終端模擬窗口,也被叫作 "Vim 窗口"。一個屏幕包含一個或多個窗口,被狀態行和屏幕底部的命令行分割。
+-------------------------------+
屏幕 | 窗口 1 | 窗口 2 |
| | |
| | |
|=== 狀態行 ===|==== 狀態行 ===|
| 窗口 3 |
| |
| |
|========== 狀態行 =============|
|命令行 |
+-------------------------------+
安裝MiniBufferExplorer
lingd@ubuntu:~$ vim-addons install minibufexplorer
配置MiniBufferExplorer
在vim配置文件/home/user/.vimrc中加入以下的配置:
" -- MiniBufferExplorer --
let g:miniBufExplMapWindowNavVim = 1 " 按下Ctrl+h/j/k/l,能夠切換到當前窗口的上下左右窗口
let g:miniBufExplMapWindowNavArrows = 1 " 按下Ctrl+箭頭,能夠切換到當前窗口的上下左右窗口
let g:miniBufExplMapCTabSwitchBufs = 1 " 啓用如下兩個功能:Ctrl+tab移到下一個buffer並在當前窗口打開;Ctrl+Shift+tab移到上一個buffer並在當前窗口打開;ubuntu好像不支持
"let g:miniBufExplMapCTabSwitchWindows = 1 " 啓用如下兩個功能:Ctrl+tab移到下一個窗口;Ctrl+Shift+tab移到上一個窗口;ubuntu好像不支持
let g:miniBufExplModSelTarget = 1 " 不要在不可編輯內容的窗口(如TagList窗口)中打開選中的buffer
經常使用命令
<Tab> 移到上一個buffer
<Shift-Tab> 移到下一個buffer
<Enter> 打開光標所在的buffer
d 刪除光標所在的buffer
10、代碼摺疊fold
摺疊用於把緩衝區內某一範圍內的文本行顯示爲屏幕上的一行。就像一張紙,要它縮短
些,能夠把它摺疊起來:
+------------------------+
| 行 1 |
| 行 2 |
| 行 3 |
|_______________________ |
\ \
\________________________\
/ 被摺疊的行 /
/________________________/
| 行 12 |
| 行 13 |
| 行 14 |
+------------------------+
那些文本仍然在緩衝區內而沒有改變。受到摺疊影響的只是文本行顯示的方式。
摺疊的好處是,經過把多行的一節摺疊成帶有摺疊提示的一行,會使你更好地瞭解對文本
的宏觀結構。
摺疊方式foldmethod
vim提供如下6種方法來選定摺疊方式:
manual 手工定義摺疊
indent 更多的縮進表示更高級別的摺疊
expr 用表達式來定義摺疊
syntax 用語法高亮來定義摺疊
diff 對沒有更改的文本進行摺疊
marker 對文中的標誌摺疊
摺疊級別foldlevel
'foldlevel' 是個數值選項:數字越大則打開的摺疊更多。
當 'foldlevel' 爲 0 時,全部的摺疊關閉。
當 'foldlevel' 爲正數時,一些摺疊關閉。
當 'foldlevel' 很大時,全部的摺疊打開。
摺疊欄foldcolumn
'foldcolumn' 是個數字,它設定了在窗口的邊上表示摺疊的欄的寬度。當爲0時,沒有摺疊欄。最大是12。
一個打開的摺疊由一欄來表示,頂端是 '-',其下方是 '|'。這欄在摺疊結束的地方結束。當摺疊嵌套時,嵌套的摺疊出如今被包含的摺疊右方一個字符位置。
一個關閉的摺疊由 '+' 表示。
當摺疊欄太窄而不能顯示全部摺疊時,顯示一數字來表示嵌套的級別。
在摺疊欄點擊鼠標,能夠打開和關閉摺疊:
- 點擊 '+' 打開在這行的關閉摺疊
- 在任何其餘非空字符上點擊,關閉這行上的打開摺疊
在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 打開全部的摺疊
幫助文檔
:help usr_28.txt
:help fold.txt
11、項目目錄數管理器Project
Project插件是用來顯示項目的目錄樹的,這個目錄樹是默認保存在~/.vimprojects文件中。
安裝Project
lingd@ubuntu:~$ vim-addons install project
Project目錄樹能夠經過下面的步驟生成:
1) 打開vim在命令模式下輸入 :Project,在屏幕的最左邊就會出現一個project框。不過由於沒有初始化暫時是空的
2)在命令模式下(不是插入模式)輸入\C (大寫的C),會出現下面這些信息:
Enter the Name of the Entry: xxxx (輸入項目名稱)
Enter the Absolute Directory to Load: /xxx/xxx/xxx (輸入項目根目錄的絕對路徑)
Enter the CD parameter: . ("."爲當前目錄)或者和項目根目錄一致
Enter the File Filter: *.* (符合條件的源文件,能夠是*.cpp/*.h等)
PS:項目目錄能夠嵌套。並且更改以後在~/.vimprojects文件中就能看到內容,你能夠手動進行更改。
十二、quickfix命令集
經過quickfix命令集,你可在 Vim 內編譯程序並直接跳轉到出錯位置進行修正。你能夠接着從新編譯並作修正,直到再也不出錯爲止。
在vim配置文件/home/user/.vimrc中加入以下的配置:
"-- QuickFix setting --
" 按下F6,執行make clean
map <F6> :make clean<CR><CR><CR>
" 按下F7,執行make編譯程序,並打開quickfix窗口,顯示編譯信息
map <F7> :make<CR><CR><CR> :copen<CR><CR>
" 按下F8,光標移到上一個錯誤所在的行
map <F8> :cp<CR>
" 按下F9,光標移到下一個錯誤所在的行
map <F9> :cn<CR>
" 以上的映射是使上面的快捷鍵在插入模式下也能用
imap <F6> <ESC>:make clean<CR><CR><CR>
imap <F7> <ESC>:make<CR><CR><CR> :copen<CR><CR>
imap <F8> <ESC>:cp<CR>
imap <F9> <ESC>:cn<CR>
幫助文檔
:help usr_30
:help quickfix
下面的命令運行 "make" (包括你所給出的參數) 程序並捕捉其運行結果: >
:make {arguments}
若是編譯時出現錯誤,按 <Enter>,回到vim界面,看不到出錯信息了!這時,能夠運行如下命令
:cw[indow]
打開quickfix窗口來查看出錯信息,它會自動跳到第一處出錯的地方。而後,你能夠雙擊出錯某一條出錯信息,vim就會自動跳轉到相應的出錯位置
:cn[ext] 光標移到下一個錯誤所在的行
:cp[revious] 光標移到上一個錯誤所在的行
:cfirst 到第一處錯誤
:clast 到最後一處錯誤
:cc 空間不夠時,Vim 會縮短出錯信息。若是你想查看詳細信息,可使用此命令
:cl[ist] 列出全部出錯信息的概覽(只有那些含有文件名或行數的錯誤信息會被顯示,須要查看那些並不含文件名或行數的信息可用":cl[ist]!"命令)
13、Cscope
Cscope是一個相似於ctags的工具,不過其功能比ctags強大不少。
安裝Cscope
lingd@ubuntu:~$ sudo apt-get install cscope
在vim配置文件/home/user/.vimrc中加入以下的配置:
"-- Cscope setting --
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 <F4> :cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
imap <F4> <ESC>:cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
" 將:cs find c等Cscope查找命令映射爲<C-_>c等快捷鍵(按法是先按Ctrl+Shift+-, 而後很快再按下c)
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR> :copen<CR><CR>
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數據庫
lingd@ubuntu:~/arm/linux-2.6.28.7$ cscope -Rbq
lingd@ubuntu:~/arm/linux-2.6.28.7$ 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-_>c等快捷鍵(按法是先按Ctrl+Shift+-, 而後很快按下c)
幫助文檔
:help if_cscop
注意:幫助文檔if_cscop中,快捷鍵映射nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>是有誤的!
好比光標"header.h"上按下<C-_>i,也就是查找包含"header.h"的文件。可是按照這個映射規則,則是將<C-_>i映射爲cs find i ^header.h$,也就是查找包含"^header.h$"的文件,這顯然不是咱們想要的結果。該映射規則應該改爲nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
14、vim經常使用快捷鍵
% 跳轉到配對的括號去
[[ 跳轉到當前或者上一代碼塊(函數定義、類定義等)的開頭去(但要求代碼塊中'{'必須單獨佔一行)
][ 跳轉到當前代碼塊(函數定義、類定義等)的結尾去(但要求代碼塊中'{'必須單獨佔一行)
]] 跳轉到下一代碼塊(函數定義、類定義等)的開頭去(但要求代碼塊中'{'必須單獨佔一行)
[/ 跳到註釋開頭(只對/* */註釋有效)
]/ 跳到註釋結尾(只對/* */註釋有效)
gD 跳轉到當前文件內標識符首次出現的位置,可用於跳轉到所有變量的定義處;查找局部變量時,要是多個函數中定義了該局部變量,使用gD進行查找,找到的變量定義可能不是你須要的
gd 跳轉到當前函數內標識符首次出現的位置,可用於跳轉到局部變量的定義處
'' 跳轉到光標上次停靠的地方, 是兩個', 而不是一個"
mx 設置書籤,x只能是a-z的26個字母
`x 跳轉到書籤處("`"是1左邊的鍵)
> 增長縮進,"x>"表示增長如下x行的縮進
< 減小縮進,"x<"表示減小如下x行的縮進