




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、需要軟件vim 下載地址code_complete.vim 插件/scripts/script.php?script_id=1764ctags 一般安裝完vim后都會(huì)有,ubuntu中好像是不支持,需要下載.一 vim 配置轉(zhuǎn)載Eric的文章,原文出處1、配置文件的位置 在目錄 /etc/ 下面,有個(gè)名為vimrc的文件,這是系統(tǒng)中公共的vim配置文件,對(duì)所有用戶都有效。而在每個(gè)用戶的主目錄下,都可以自己建立私有的配置文件,命名 為:“.vimrc”。例如,/root目錄下,通常已經(jīng)存在一個(gè)
2、.vimrc文件。 2、設(shè)置語(yǔ)法高亮顯示1) 打開(kāi)vimrc,添加以下語(yǔ)句來(lái)使得語(yǔ)法高亮顯示: syntax on2) 如果此時(shí)語(yǔ)法還是沒(méi)有高亮顯示,那么在/etc目錄下的profile文件中添加以下語(yǔ)句: export TERM=xterm-color3、設(shè)置Windows風(fēng)格的C/C+自動(dòng)縮進(jìn)(添加以下set語(yǔ)句到vimrc中) 1)不討論制表符為8還是為4較好,這里設(shè)置(軟)制表符寬度為4:&
3、#160; set tabstop=4 set softtabstop=4
4、 2)設(shè)置縮進(jìn)的空格數(shù)為4 set shiftwidth=4 3)設(shè)置自動(dòng)縮進(jìn):即每行的縮進(jìn)值與上一行相等;使用 noautoindent 取消設(shè)置:set autoindent
5、0; 4)設(shè)置使用 C/C+ 語(yǔ)言的自動(dòng)縮進(jìn)方式: set cindent 5)設(shè)置C/C+語(yǔ)言的具體縮進(jìn)方式(以我的windows風(fēng)格為例): &
6、#160; set cinoptions=0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s 6)如果想在左側(cè)顯示文本的行號(hào),可以用以下語(yǔ)句:
7、 set nu 7)最后,如果沒(méi)有下列語(yǔ)句,就加上吧:if &term="xterm" set t_Co=8 set t_Sb=4%dm set t_Sf=3%dmendifPS:自動(dòng)縮進(jìn)有兩個(gè)選項(xiàng): 代碼:
8、set autoindent set cindent autoindent 就是自動(dòng)縮進(jìn)的意思,當(dāng)你在輸入狀態(tài)用回車(chē)鍵插入一個(gè)新行,或者在 normal 狀態(tài)用 o 或者 O 插入一個(gè)新行時(shí),autoindent 會(huì)自動(dòng)地將當(dāng)前行的縮進(jìn)拷貝到新行,也就是"自動(dòng)對(duì)齊”,當(dāng)然了,如果你在新行沒(méi)有輸入任何字符,那么這個(gè)縮進(jìn)將自動(dòng)刪除。 cindent 就不同了,它會(huì)按照 C 語(yǔ)言的語(yǔ)法,自動(dòng)地調(diào)整縮進(jìn)的長(zhǎng)度,比如,當(dāng)你輸入了半條語(yǔ)句然后回車(chē)時(shí),縮進(jìn)會(huì)自動(dòng)增加一個(gè) TABST
9、OP 值,當(dāng)你鍵入了一個(gè)右花括號(hào)時(shí),會(huì)自動(dòng)減少一個(gè) TABSTOP 值。二 code_complete 配置把下載的code_complete拷貝到plugin目錄下,一般都在(我的是)/usr/share/vim/vim71 /plugin下三 用ctags命令生成tags文件,ctags -R -c-kinds=+p -fields=+S應(yīng)該算是建立索引表,然后把生成的tags文件拷貝到你編程的目錄。在vim中使用鍵就可以補(bǔ)全函數(shù)原型了。· Vi大家都很熟悉,某些情況下它是我們?cè)贚inux下唯一可用的文本編輯器。其實(shí)我們平時(shí)所指的VI其實(shí)是VIM (ViImproved,VI增強(qiáng)
10、版)。有人常常拿VIM和emacs比較,VIM盡管不象emacs那樣有那么多的功能,但是比emacs更方便、好用。VIM簡(jiǎn)單易用,只要看看VIM自帶的vitutor,大約只要20分鐘就能掌握VIM的用法。對(duì)于Linux下的C/C+的程序員,使用VIM+ Ctags的組合來(lái)寫(xiě)程序也許是最佳的選擇。VI的使用方法這里就不羅嗦了,本文假設(shè)大家已花了20分鐘學(xué)習(xí)過(guò)了vitutor。本節(jié)我們主要講一下Ctags這個(gè)程序。盡管ctags也可以支持其它編輯器,但是它正式支持的只有VIM。并且VIM中已經(jīng)默認(rèn)安裝了Ctags,它可以幫助程序員很容易地瀏覽源代碼。熟練的使用ctags僅需記住下面七條命令:(很簡(jiǎn)
11、單吧,呵呵)1 $ ctags R * ($ 為L(zhǎng)inux系統(tǒng)Shell提示符)2. $ vi t tag (請(qǐng)把tag替換為您欲查找的變量或函數(shù)名)3 :ts (ts 助記字:tags list, “:”開(kāi)頭的命令為VI中命令行模式命令)4 :tp (tp 助記字:tags preview)?此命令不常用,可以不用記5 :tn (tn 助記字:tags next) ?此命令不常用,可以不用記6 Ctrl + 7 Ctrl + T下面我們逐條的解釋上面的命令:“$ ctags R *”:“-R”表示遞歸創(chuàng)建,也就包括源代碼根目錄(當(dāng)前目錄)下的所有子目錄?!?”表示所有文件。這條命令會(huì)在當(dāng)前目
12、錄下產(chǎn)生一個(gè)“tags”文件,當(dāng)用戶在當(dāng)前目錄中運(yùn)行vi時(shí),會(huì)自動(dòng)載入此tags文件。Tags文件中包括這些對(duì)象的列表:用#define定義的宏枚舉型變量的值函數(shù)的定義、原型和聲明名字空間(namespace)類(lèi)型定義(typedefs)變量(包括定義和聲明)類(lèi)(class)、結(jié)構(gòu)(struct)、枚舉類(lèi)型(enum)和聯(lián)合(union)類(lèi)、結(jié)構(gòu)和聯(lián)合中成員變量或函數(shù)VIM用這個(gè)“tags”文件來(lái)定位上面這些做了標(biāo)記的對(duì)象。剩下的命令就是定位這些對(duì)象的方法:“$ vi t tag” :在運(yùn)行vim的時(shí)候加上“-t”參數(shù),例如:/usr/src$ vim -t main這個(gè)命令將打開(kāi)定義“mai
13、n”(變量或函數(shù)或其它)的文件,并把光標(biāo)定位到這一行。如果這個(gè)變量或函數(shù)有多處定義,在VI命令行模式“:ts”命令就能列出一個(gè)列表供用戶選擇。 “:tp”為上一個(gè)tag標(biāo)記文件,“:tn”為下一個(gè)tag標(biāo)記文件。當(dāng)然,若當(dāng)前tags文件中用戶所查找的變量或函數(shù)名只有一個(gè),“:tp,: tn”命令不可用。最方便的方法是把光標(biāo)移到變量名或函數(shù)名上,然后按下“Ctrl+”,這樣就能直接跳到這個(gè)變量或函數(shù)定義的源文件中,并把光標(biāo)定位到這一行。用 “Ctrl+t”可以退回原來(lái)的地方。即使用戶使用了N次“Ctrl+”查找了N個(gè)變量,按N次“Ctrl+t”也能回到最初打開(kāi)的文件,它會(huì)按原路返回 。注意:運(yùn)行
14、vim的時(shí)候,必須在“tags”文件所在的目錄下運(yùn)行。否則,運(yùn)行vim的時(shí)候還要用“:settags=”命令設(shè)定“tags”文件的路徑,這樣vim才能找到“tags”文件。在完成編碼時(shí),可以手工刪掉tags文件(帚把不到,灰塵不會(huì)自己跑掉)/home/brimmer/src$ ctags -R"-R"表示遞歸創(chuàng)建,也就包括源代碼根目錄下的所有子目錄下的源程序。"tags"文件中包括這些對(duì)象的列表:l 用#define定義的宏l
15、160; 枚舉型變量的值l 函數(shù)的定義、原型和聲明l 名字空間(namespace)l 類(lèi)型定義(typedefs)l 變量(包括定義和聲明)l
16、; 類(lèi)(class)、結(jié)構(gòu)(struct)、枚舉類(lèi)型(enum)和聯(lián)合(union)l 類(lèi)、結(jié)構(gòu)和聯(lián)合中成員變量或函數(shù)VIM用這個(gè)"tags"文件來(lái)定位上面這些做了標(biāo)記的對(duì)象,下面介紹一下定位這些對(duì)象的方法:1) 用命令行。在運(yùn)行vim的時(shí)候加上"-t"參數(shù),例如:/home/brimme
17、r/src$ vim -t foo_bar這個(gè)命令將打開(kāi)定義"foo_bar"(變量或函數(shù)或其它)的文件,并把光標(biāo)定位到這一行。2) 在vim編輯器內(nèi)用":ta"命令,例如::ta foo_bar3) 最方便的方法是把光標(biāo)移到變量名或函數(shù)名上,然后按下"Ctrl-"。用"Ctrl-o"退回原來(lái)的地方。注意:運(yùn)行
18、vim的時(shí)候,必須在"tags"文件所在的目錄下運(yùn)行。否則,運(yùn)行vim的時(shí)候還要用":set tags="命令設(shè)定"tags"文件的路徑,這樣vim才能找到"tags"文件。在函數(shù)中移動(dòng)光標(biāo) 轉(zhuǎn)到上一個(gè)位于第一列的"" 轉(zhuǎn)到下一個(gè)位于第一列的"" 轉(zhuǎn)到上一個(gè)空行 轉(zhuǎn)到下一個(gè)空行g(shù)d 轉(zhuǎn)到當(dāng)前光標(biāo)所指的局部變量的定義* 轉(zhuǎn)到當(dāng)前光標(biāo)所指的單詞下一次
19、出現(xiàn)的地方# 轉(zhuǎn)到當(dāng)前光標(biāo)所指的單詞上一次出現(xiàn)的地方Vim 的創(chuàng)造者是一名計(jì)算機(jī)程序員,因此這就不奇怪 Vim 中有許多幫助編寫(xiě)程序的功能:跳轉(zhuǎn)到標(biāo)識(shí)符被定義和使用的地方;在另一個(gè)窗口中預(yù)覽有關(guān)的聲明等等。在下一章中還會(huì)介紹更多的功能。|29.1| 使用標(biāo)簽|29.2| 預(yù)覽窗口|29.3| 在代碼間移動(dòng)|29.4| 查找全局標(biāo)識(shí)符|29.5| 查找局部標(biāo)識(shí)符 下一章:|usr_30.txt| 編輯程序 前一章:|usr_28.txt|
20、 折疊 目錄:|usr_toc.txt|*29.1* 使用標(biāo)簽什么是標(biāo)簽?標(biāo)簽就是一個(gè)標(biāo)識(shí)符被定義的地方。一個(gè)例子就是 C 或者 C+ 程序中的函數(shù)定義。標(biāo)簽列表可以保存在一個(gè)標(biāo)簽文件中。Vim 可以通過(guò)它來(lái)從任何地方跳轉(zhuǎn)到該標(biāo)簽,也就是一個(gè)標(biāo)識(shí)符被定義的地方。 在當(dāng)前目錄下為所有的 C 文件生成標(biāo)簽文件,使用下面的這個(gè)命令: ctags *.c"ctags" 是一個(gè)獨(dú)立的程序。大多數(shù) Unix 系統(tǒng)上都已經(jīng)安裝了它。如果你還沒(méi)有安裝,可以在這里找到 "Exuberant ctags"
21、;: 現(xiàn)在你可以使用下面的命令跳轉(zhuǎn)到一個(gè)函數(shù)定義的地方: :tag startlist這個(gè)命令會(huì)找到函數(shù) "startlist",即使該函數(shù)是在另一個(gè)文件中。 CTRL- 命令會(huì)跳轉(zhuǎn)到當(dāng)前光標(biāo)下單詞的標(biāo)簽。這樣瀏覽毫無(wú)頭緒的 C 代碼會(huì)變得更容些易。舉個(gè)例子,假設(shè)你在函數(shù) "write_block" 中。你可以看到它調(diào)用了函數(shù)"write_line"。但 "write_line" 做了什么呢?將光標(biāo)置于調(diào)用 "write_line" 的地方然后按 CTRL-,你就跳轉(zhuǎn)到了這個(gè)函數(shù)的定義的地方了。
22、 "write_line" 函數(shù)調(diào)用了 "write_char"。你需要知道它做了什么。將光標(biāo)定位到調(diào)用 "write_char" 的地方然后按 CTRL-,你就到了定義"write_char" 的地方。 +-+ |void write_block(char *s; int cnt) | | | | int i; | | for (i = 0; i < cnt; +i) | | write_line(si); | | | | +-|-+ | CTRL- | | +-+ +-> |void write_l
23、ine(char *s) | | | | while (*s != 0) | | write_char(*s+); | | | | +-|-+ | CTRL- | | +-+ +-> |void write_char(char c) | | | | putchar(int)(unsigned char)c); | | | +-+":tags" 命令顯示你經(jīng)過(guò)的標(biāo)簽列表: :tags # TO tag FROM line in file/text 1 1 write_line 8 write_block.c 2 1 write_char 7 write_line.c &
24、gt; 現(xiàn)在介紹向回跳轉(zhuǎn)。 CTRL-T 命令跳轉(zhuǎn)到上一個(gè)標(biāo)簽。在上例中,你會(huì)回到 "write_line"函數(shù)調(diào)用 "write_char" 的地方。 這個(gè)命令接受一個(gè)計(jì)數(shù)參數(shù),用來(lái)表示跳轉(zhuǎn)回去的標(biāo)簽個(gè)數(shù)。你已經(jīng)向前跳轉(zhuǎn),現(xiàn)在又跳轉(zhuǎn)了回去?,F(xiàn)在我們?cè)僖淮蜗蚯疤D(zhuǎn)。下面的命令跳轉(zhuǎn)到標(biāo)簽列表中最上面的標(biāo)簽: :tag你可以在前面加上要向前跳轉(zhuǎn)的標(biāo)簽個(gè)數(shù)。比如:":3tag"。 CTRL-T 同樣可以加上一個(gè)計(jì)數(shù)參數(shù)。 通過(guò)這些命令,你可以用 CTRL- 延著調(diào)用樹(shù)向前跳轉(zhuǎn), 用 CTRL-T 向回跳轉(zhuǎn),用":tags"
25、; 命令顯示當(dāng)前位置。分 割 窗 口":tag" 命令會(huì)將當(dāng)前窗口的文件替換為包含新函數(shù)的文件。怎樣才能同時(shí)查看兩個(gè)文件呢?你可以使用 ":split" 命令將窗口分開(kāi)然后再用 ":tag" 命令。Vim 有個(gè)縮寫(xiě)命令可以做到這些: :stag tagname使用下面的命令可以分割當(dāng)前窗口并跳轉(zhuǎn)到光標(biāo)下的標(biāo)簽: CTRL-W 如果指定了計(jì)數(shù)參數(shù),新窗口將包含指定的那么多行。多 個(gè) 標(biāo) 記 文 件如果在多個(gè)目錄中都有文件,你可以在每一個(gè)目錄下創(chuàng)建一個(gè)標(biāo)簽文件。Vim 只能跳轉(zhuǎn)到那個(gè)目錄下的標(biāo)簽。 通過(guò)設(shè)定 'tags'
26、選項(xiàng),你可以使用多個(gè)相關(guān)的標(biāo)簽文件。 比如: :set tags=./tags,././tags,./*/tags這會(huì)使 Vim 找到當(dāng)前文件所在目錄及其父目錄和所有子目錄下的標(biāo)簽文件。 這已經(jīng)是不少的標(biāo)簽文件了,但也許仍不夠。比如,當(dāng)編輯 "/proj/src" 目錄下的一個(gè)文件時(shí),你無(wú)法找到 "/proj/sub/tags" 目錄下的標(biāo)簽文件。對(duì)這種情況,Vim提供了一個(gè)查找整個(gè)目錄樹(shù)下標(biāo)簽文件的方法,比如: :set tags=/proj/*/tags單 個(gè) 標(biāo) 記 文 件當(dāng) Vim 在多個(gè)地方查找標(biāo)簽文件時(shí),你會(huì)聽(tīng)到硬盤(pán)在格格作響。這樣會(huì)有點(diǎn)慢。
27、在這種情況下,你最好將這些時(shí)間花在生成一個(gè)大的標(biāo)簽文件上。你可以要等一會(huì)兒。 這得借助上面提到的 "Exuberant ctags" 程序。它有一個(gè)選項(xiàng)可以搜索整個(gè)目錄樹(shù): cd /proj ctags -R .這樣做的好處是 "Exuberant ctags" 可以識(shí)別多種文件類(lèi)型,它不僅適用于 C 和 C+程序,還適用于 Eiffel 甚至 Vim 腳本。請(qǐng)參考 ctags 文檔進(jìn)行調(diào)整所用參數(shù)。 現(xiàn)在你只需要告訴 Vim 你的標(biāo)簽文件在何處: :set tags=/proj/tags多 個(gè) 匹 配當(dāng)一個(gè)函數(shù)(或類(lèi)中的方法)被定義多次, "
28、:tags" 命令會(huì)跳轉(zhuǎn)到第一處。如果在當(dāng)前文件中存在匹配,那它將會(huì)被首先使用。 你現(xiàn)在可以跳轉(zhuǎn)到同一個(gè)標(biāo)簽的其它匹配處: :tnext重復(fù)執(zhí)行這個(gè)命令可以找到更多的匹配。如果存在很多匹配,你可以選擇要跳轉(zhuǎn)到哪一個(gè): :tselect tagnameVim 會(huì)為你展示一個(gè)選擇列表: # pri kind tag file 1 F f mch_init os_amiga.c mch_init() 2 F f mch_init os_mac.c mch_init() 3 F f mch_init os_msdos.c mch_init(void) 4 F f mch_init os_ri
29、scos.c mch_init() Enter nr of choice (<CR> to abort): 你現(xiàn)在可以輸入要跳轉(zhuǎn)到的匹配代號(hào)(在第一列)。其它列的信息可以讓你知道匹配在何處被定義??梢杂眠@些命令在各匹配的標(biāo)簽間移動(dòng): :tfirst 到第一個(gè)匹配 :counttprevious 向前 count 個(gè)匹配 :counttnext 向后 count 個(gè)匹配 :tlast 到最后一個(gè)匹配如果沒(méi)有指定,count 省缺為一。猜 測(cè) 標(biāo) 簽 名命令行補(bǔ)全是避免輸入長(zhǎng)標(biāo)簽名的好辦法。只需輸入開(kāi)始的一部分然后按 <Tab>: :tag write_<Tab>
30、;你會(huì)得到第一個(gè)匹配。如果這不是你想要的,重復(fù)輸入 <Tab> 直到你找到正確的匹配。 有時(shí)你只知道一個(gè)函數(shù)名的一部分,或是你有很多以相同字符串開(kāi)頭而結(jié)尾不同的標(biāo)記。這時(shí)你可以告訴 Vim 使用一個(gè)模式來(lái)查找標(biāo)簽。 假設(shè)你要跳轉(zhuǎn)到一個(gè)包含 "block" 的標(biāo)簽。首先輸入: :tag /block現(xiàn)在再利用命令行補(bǔ)全功能:輸入 <Tab>。Vim 會(huì)找到所有包含 "block" 的標(biāo)簽并使用第一個(gè)匹配。 標(biāo)簽名前面的 "/" 告訴 Vim 這不是一個(gè)確定的標(biāo)簽名而是一個(gè)模式。你可以利用有關(guān)查找模式的所有特性。舉
31、個(gè)列子,假設(shè)你要選擇所有以 "write_" 開(kāi)頭的標(biāo)簽: :tselect /write_"" 指定標(biāo)簽以 "write_" 開(kāi)頭,否則在中間含有 "write_" 的標(biāo)簽名也會(huì)被找到。類(lèi)似地,"_FCKpd_0quot; 指定標(biāo)簽名結(jié)尾處的匹配。標(biāo) 簽 瀏 覽 器CTRL- 可以讓你跳轉(zhuǎn)到光標(biāo)所在標(biāo)識(shí)符的定義處,因此你可以利用標(biāo)識(shí)符的列表來(lái)形成一個(gè)目錄。這里給出一個(gè)例子。 首先生成一個(gè)標(biāo)識(shí)符列表(需要 Exuberant ctags): ctags -c-types=f -f functions *.
32、c現(xiàn)在打開(kāi) Vim 并在一個(gè)垂直分割窗口中編輯這個(gè)文件: vim :vsplit functions窗口中包含一個(gè)所有函數(shù)的列表。其它的東西可以被忽略。用 ":setlocal ts=99" 命令使其顯示得更清晰些。 在這個(gè)窗口中,定義一個(gè) mapping: :nnoremap <buffer> <CR> 0ye<C-W>w:tag <C-R>"<CR>移動(dòng)光標(biāo)至要跳轉(zhuǎn)到函數(shù)的所在行,輸入 <Enter>。Vim 會(huì)在另一個(gè)窗口中跳轉(zhuǎn)到所選擇的函數(shù)定義處。相 關(guān) 雜 項(xiàng)你可以設(shè)定 'i
33、gnorecase' 選項(xiàng)來(lái)忽略標(biāo)簽名里的大小寫(xiě)。'tagbsearch' 選項(xiàng)標(biāo)明標(biāo)簽文件是否經(jīng)過(guò)排序。省缺是假定為標(biāo)簽文件已排序,這樣會(huì)使查找更快,但如果文件沒(méi)有被排序是無(wú)法工作的。'taglength' 選項(xiàng)可用來(lái)告訴 Vim 一個(gè)標(biāo)簽的有效字符個(gè)數(shù)。當(dāng)你使用 SNiFF+ 程序時(shí),你可以利用 Vim 的有關(guān)接口 |sniff| 。SNiFF+ 是一個(gè)商業(yè)軟件。Cscope 是一個(gè)自由軟件。它不僅可以找到一個(gè)標(biāo)識(shí)符被聲明的地方,還可以找到標(biāo)識(shí)符被使用的地方。 請(qǐng)參考 |cscope|。*29.2* 預(yù)覽窗口當(dāng)編輯含有函數(shù)調(diào)用的代碼時(shí),你需要使用正確
34、的調(diào)用參數(shù)。要獲知所要傳遞的值,你可以查看這個(gè)函數(shù)是如何定義的。標(biāo)簽機(jī)制對(duì)此十分適用。如果定義可在另一個(gè)窗口內(nèi)顯示那就更好了。對(duì)此我們可以利用預(yù)覽窗口。 打開(kāi)一個(gè)預(yù)覽窗口來(lái)顯示函數(shù) "write_char": :ptag write_charVim 會(huì)打開(kāi)一個(gè)窗口,跳轉(zhuǎn)到 "write_char" 標(biāo)簽。然后它會(huì)回到原來(lái)的位置。這樣你可以繼續(xù)輸入而不必使用 CTRL-W 命令。 如果函數(shù)名出現(xiàn)在文本中,你可以用下面的命令在預(yù)覽窗口中得到其定義: CTRL-W 有一個(gè)腳本可以自動(dòng)顯示光標(biāo)處的標(biāo)簽定義。請(qǐng)參考 |CursorHold-example| 。用下
35、面的命令關(guān)閉預(yù)覽窗口: :pclose要在預(yù)覽窗口中編輯一個(gè)指定的文件,用 ":pedit" 。這在編輯頭文件時(shí)很有用,比如: :pedit defs.h最后, "psearch" 可用來(lái)查找當(dāng)前文件和任何包含文件中的單詞并在預(yù)覽窗口中顯示匹配。這在使用沒(méi)有標(biāo)簽文件的庫(kù)函數(shù)時(shí)十分有用。例如: :psearch popen這會(huì)在預(yù)覽窗口中顯示含有 popen() 原型的 "stdio.h" 文件: FILE *popen _P(const char *, const char *); 你可以用 'previewheight
36、9; 選項(xiàng)指定預(yù)覽窗口打開(kāi)時(shí)的高度。*29.3* 在代碼間移動(dòng)因?yàn)槌绦虼a是結(jié)構(gòu)化的,Vim 可以識(shí)別其中的有關(guān)項(xiàng)目。一些特定的命令可用來(lái)完成相關(guān)的移動(dòng)。 C 程序中經(jīng)常包含類(lèi)似下面的代碼: #ifdef USE_POPEN fd = popen("ls", "r") #else fd = fopen("tmp", "w") #endif 有時(shí)會(huì)更長(zhǎng),也許還有套嵌。將光標(biāo)置于 "#ifdef" 處按 %。Vim 會(huì)跳轉(zhuǎn)到"#else"。繼續(xù)按 % 會(huì)跳轉(zhuǎn)到 "#en
37、dif"。再次按下 % 又回到原來(lái)的 "#ifdef"。 當(dāng)代碼套嵌時(shí),Vim 會(huì)找到相匹配的項(xiàng)目。這是檢查你是否忘記了一個(gè) "#endif" 的好辦法。 當(dāng)你在一個(gè) "#ifdef" - "#endif" 塊內(nèi)的某個(gè)位置,你可以用下面的命令回到開(kāi)始處: #如果你的位置不是在 "#if" 或 "#ifdef" 之后, Vim 會(huì)鳴音。用下面命令可以跳轉(zhuǎn)到下一個(gè) "#else" 或 "#endif": #這兩個(gè)命令會(huì)跳過(guò)它所經(jīng)過(guò)
38、的 "#if" - "#endif" 塊。例如: #if defined(HAS_INC_H) a = a + inc(); # ifdef USE_THEME a += 3; # endif set_width(a); 如果光標(biāo)在最后一行,"#" 會(huì)移動(dòng)到第一行。中間的 "#ifdef" - "#endif" 塊被跳過(guò)。在 代 碼 塊 內(nèi) 移 動(dòng)C 代碼塊包含在 中,有時(shí)一個(gè)代碼會(huì)很長(zhǎng)。要跳轉(zhuǎn)到外部代碼塊的開(kāi)始處,用 ""命令。用 "" 找到結(jié)尾處。(前
39、提是 "" 和 "" 都在第一列。) "" 命令跳轉(zhuǎn)到當(dāng)前代碼塊的開(kāi)始處。它會(huì)跳過(guò)同一級(jí)別的 對(duì)。"" 跳轉(zhuǎn)到結(jié)尾。 一點(diǎn)概述: function(int a) +-> | if (a) | +-> | | for (;) -+ | | +-> | | | | foo(32); | -+ | | | if (bar(a) -+ | | +- | +- break; | | | | <-+ | | +- foobar(a) | | <-+ | <-+當(dāng)編寫(xiě) C+ 或 Java 代碼
40、時(shí),外部代碼塊是類(lèi),而下一級(jí)的 是方法。在類(lèi)內(nèi)部用"m" 可以找到前一個(gè)方法的開(kāi)始。"m" 會(huì)找到下一個(gè)方法的開(kāi)始。另外,"" 向后移動(dòng)到一個(gè)函數(shù)的結(jié)尾,"" 向前移動(dòng)到一個(gè)函數(shù)的結(jié)尾。函數(shù)的結(jié)尾指的是處在第一列的 ""。 int func1(void) return 1; +-> | | int func2(void) | +-> | | if (flag) start +- +- return flag; | | return 2; | +-> | | int func3(
41、void) +-> return 3; 不要忘了你還可以用 "%" 在匹配的 (), 和 間移動(dòng)。這在它們相距很多行時(shí)仍然適用。在 括 號(hào) 內(nèi) 移 動(dòng)"(" 和 ")" 命令"" 和 "" 類(lèi)似,只不過(guò)它們適用于 () 對(duì)而不是 對(duì)。 ( <- <- if (a = b && (c = d | (e > f) && x > y) -> -> )在 注 釋 間 移 動(dòng)移動(dòng)到一個(gè)注釋的開(kāi)始用 "/";向前移
42、動(dòng)到注釋的結(jié)尾用 "/"。這只對(duì) /* - */ 注釋有效。 +-> +-> /* | / | * A comment about -+ / | +- * wonderful life. | / | */ <-+ | +- foo = bar * 3; -+ | / /* a short comment */ <-+*29.4* 查找全局標(biāo)識(shí)符你在編輯一個(gè) C 程序,想要知道一個(gè)變量是被聲明為 "int" 還是 "unsigned"。一個(gè)快速的方法是使用 "I" 命令來(lái)查找。 假設(shè)光標(biāo)在單詞
43、 "column" 處。輸入: IVim 會(huì)列出它所找出的匹配行,不僅在當(dāng)前文件內(nèi)查找,還會(huì)在所有的包含文件中查找。結(jié)果如下所示: structs.h 1: 29 unsigned column; /* column number */ 相對(duì)使用標(biāo)簽文件或預(yù)覽窗口的好處是包含文件也被搜索。大多數(shù)情況下都能找到正確的聲明。即使標(biāo)簽文件已經(jīng)過(guò)期或者你沒(méi)有為包含文件建立標(biāo)簽也不會(huì)影響結(jié)果。 但是一些準(zhǔn)備工作是必要的,否則 "I" 就沒(méi)法工作。首先,'include' 選項(xiàng)必須指定文件是如何被包含的。省缺值適用于 C 和 C+。對(duì)其它的語(yǔ)言,你需
44、要自己設(shè)定。定 位 包 含 文 件 Vim 會(huì)找到 'path' 選項(xiàng)指定路徑中的包含文件。如果缺少某個(gè)目錄,一些包含文件將不會(huì)被找到。你可以用這個(gè)命令來(lái)查看: :checkpath它會(huì)列出不能找到的包含文件,以及被找到的包含文件。一個(gè)輸出樣例: - Included files not found in path - <io.h> vim.h -> <functions.h> <clib/exec_protos.h> 文件 "io.h" 被當(dāng)前文件包含但無(wú)法找到。"vim.h" 可以找到,這樣
45、":checkpath" 跟進(jìn)這個(gè)文件并檢查其中的包含文件。結(jié)果顯示無(wú)法找到 "vim.h" 包含的 "functions.h" 和"clib/exec_protos.h" 文件。 Note: Vim 不是一個(gè)編譯器。它無(wú)法識(shí)別 "#ifdef" 語(yǔ)句。這就是說(shuō)所有的 "#include" 語(yǔ)句都會(huì)被使用,即使它在 "#if NEVER" 之后。給 'path' 選項(xiàng)增加一個(gè)目錄可以修正無(wú)法找到文件的錯(cuò)誤。一個(gè)好得參考是 Makefile。注意那些包括 "-I" 的條目,比如 "-I/usr/local/X11"。要增加這個(gè)目錄,用: :set path+=/usr/local/X11如果有很多的子目錄,你可以用 "*" 通配符。例如:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自愿退婚協(xié)議書(shū)
- 確定離婚協(xié)議書(shū)
- 承包垂釣園合同協(xié)議書(shū)
- 部分退股協(xié)議書(shū)
- 資質(zhì)代管協(xié)議書(shū)
- 圍墻門(mén)安裝團(tuán)隊(duì)協(xié)議書(shū)
- 聘用園長(zhǎng)協(xié)議書(shū)
- 沈陽(yáng)中專(zhuān)訂單班協(xié)議書(shū)
- 砑發(fā)技術(shù)協(xié)議書(shū)
- 股份交換協(xié)議書(shū)
- GB/T 37988-2019信息安全技術(shù)數(shù)據(jù)安全能力成熟度模型
- GB/T 17737.5-2013同軸通信電纜第5部分:CATV用干線和配線電纜分規(guī)范
- 網(wǎng)口變壓器簡(jiǎn)介課件
- 財(cái)產(chǎn)份額轉(zhuǎn)讓協(xié)議書(shū)2
- 工藝安全信息管理培訓(xùn)課件
- 產(chǎn)前篩查-課件
- 裝配式建筑疊合板安裝技術(shù)交底
- 安全管理人員安全生產(chǎn)責(zé)任制考核表
- 六年級(jí)說(shuō)明文閱讀復(fù)習(xí)公開(kāi)課課件
- 小學(xué)美術(shù)人美六年級(jí)上冊(cè)箱板上的新發(fā)現(xiàn)陳晴《箱板上的新發(fā)現(xiàn)》教學(xué)設(shè)計(jì)
- 工程經(jīng)濟(jì)學(xué)完整版課件全套ppt教程
評(píng)論
0/150
提交評(píng)論