天天看點

将vim改造成C/C++開發環境(IDE)

1、安裝Vim和Vim基本插件

首先安裝好Vim和Vim的基本插件。這些使用apt-get安裝即可:

[email protected]:~/arm$sudo apt-get install vim vim-scripts vim-doc

其中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強大的功能,其來源基本上就兩個地方:Vim插件以及Vim配置檔案。

Vim 本身的系統配置檔案夾是在/usr/share/vim/和/etc/vim/兩個檔案夾下。一般情況下,我們不會去改變這兩個檔案夾下的配置檔案,而是 在使用者檔案夾/home/user(其中,user為使用者名,我的使用者名是lingd)下建立自己的配置檔案。進入使用者檔案夾(/home/user/) 之後,用gedit建立一個名叫.vimrc的檔案:

[email protected]:~/arm$ cd ~

[email protected]:~$ 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=100 " set command history to 100 "曆史記錄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,終端輸入指令

[email protected]:~/arm$ sudo apt-get install ctags

建立源碼索引,比如我經常需要查閱Linux的核心代碼,而這些代碼放在/home/lingd/arm/linux-2.6.24.7目錄下

那麼在終端進入到該目錄後,輸入指令ctags -R *,你會發現多了一個tags檔案,這個就是索引檔案

[email protected]:~/arm$ cd linux-2.6.24.7

[email protected]:~/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

[email protected]:~/arm/linux-2.6.24.7$ ctags -R *

[email protected]:~/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的路徑,

[email protected]:~/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中包含的插件及其狀态:

[email protected]:~$ 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目錄下通過下面的 指令執行:

[email protected]:~$ mkdir .vim

[email protected]:~$ cd .vim

[email protected]:~/.vim$ mkdir plugin

[email protected]:~/.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

[email protected]:~$ 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++标準庫的源代碼。

[email protected]:~$ sudo apt-get install build-essential

# 然後在/usr/include/c++下就可以找到标準庫的頭檔案了。

[email protected]:~$ cd /usr/include/c++

[email protected]:/usr/include/c++$ ls

4.4  4.4.3

# 在此檔案夾下生成能與OmniCppComplete配合運作的tags檔案

[email protected]:/usr/include/c++$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

[email protected]:/usr/include/c++$ ls

4.4  4.4.3  tags

# 在vim的配置檔案中如下内容,然後在程式設計的時候就可以使用自動補全功能了。

[email protected]:/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行中

[email protected]:~$ cd ~

[email protected]:~$ 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

[email protected]:~$ 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

[email protected]:~$ 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

[email protected]:~$ 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

[email protected]:~$ 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注釋有效)

]/ 跳到注釋結尾(隻對注釋有效)

gD  跳轉到目前檔案内辨別符首次出現的位置,可用于跳轉到全部變量的定義處;查找局部變量時,要是多個函數中定義了該局部變量,使用gD進行查找,找到的變量定義可能不是你需要的

gd 跳轉到目前函數内辨別符首次出現的位置,可用于跳轉到局部變量的定義處

''  跳轉到光标上次停靠的地方, 是兩個', 而不是一個"

mx  設定書簽,x隻能是a-z的26個字母

`x  跳轉到書簽處("`"是1左邊的鍵)

>  增加縮進,"x>"表示增加以下x行的縮進

<  減少縮進,"x<"表示減少以下x行的縮進

繼續閱讀