亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

某人常用vim插件(zz)

系統(tǒng) 1838 0
Align
一個(gè)對(duì)齊的插件,用來(lái)排版,面對(duì)一堆亂七八糟的代碼時(shí),用來(lái)對(duì)齊代碼,功能強(qiáng)大,不過(guò)用到
的機(jī)會(huì)不多
http://www.vim.org/scripts/script.php?script_id=521
Mru
http://www.vim.org/scripts/script.php?script_id=521
給vim增加MRU功能,也就是保留最近打開(kāi)的文件記錄,:MRU打開(kāi),q退出,很方便,有過(guò)一個(gè)支持
菜單的類(lèi)似的插件
不過(guò)對(duì)于我這樣的不用菜單的用戶,還是這個(gè)命令行的好用一點(diǎn),因?yàn)榻?jīng)常使用,所以我映射
到了F2
功能強(qiáng)大的代碼注釋工具,用來(lái)注釋或者取消注釋,支持很多語(yǔ)言,可以對(duì)文本塊操作,寫(xiě)代碼
NERD_comments
功能強(qiáng)大的代碼注釋工具,用來(lái)注釋或者取消注釋,支持很多語(yǔ)言,可以對(duì)文本塊操作,寫(xiě)代碼
離不了,呵呵
最常用到的快捷鍵是"c

a.vim
在.c/.h之間切換,寫(xiě)代碼必備

bufexplorer.vim
列出當(dāng)前打開(kāi)的buffer,可以很容易的切換到和刪除選定的buffer,必備插件之一

c.vim
c/c++ support,讓你用編寫(xiě)c/c++程序時(shí)如虎添翼,有很多貼心的功能,每個(gè)功能都有快捷鍵
,不過(guò)一部分和NERD_comments沖突
如果經(jīng)常編寫(xiě)一些單文件的c程序,但是不想寫(xiě)makefile,用這個(gè),他幫你完成,F9編譯并鏈接,
ctrl-F9運(yùn)行

calendar.vim
日歷插件,有了它,用vim來(lái)寫(xiě)日記很方便

csExplorer.vim
color theme瀏覽插件,列出所有的vim color theme到一個(gè)列表中,選中后按回車(chē)即可應(yīng)用相
應(yīng)的color theme,試驗(yàn)color theme時(shí)再也不用一次次輸入:colo theme_name了,從上百個(gè)
color theme中選擇自己喜歡的theme時(shí)有用

cscope_maps.vim
cscope的vim插件,提供快捷鍵操縱cscope,好東東,如果你在用cscope的話

favex.vim
FavEx : Favorite file and directory explorer ,可以添加目錄和文件到收藏夾,可以把
經(jīng)常編輯的文件添加到收藏夾來(lái),在文件打開(kāi)以后,"ff新增文件到收藏夾,"fd新增目錄到
收藏夾

lookupfile.vim
五星級(jí)推薦的好插件!我覺(jué)得它是vim上最偉大的插件之一,提供多種方式查找文件,讓你在復(fù)
雜的目?樹(shù)中也能輕松自如找到你要的文件

matchit.vim
擴(kuò)展了vim的%功能,讓%可以匹配的,不再僅僅是括號(hào),支持多種語(yǔ)言.必備插件之一

parenquote.vim
給選中的文字加上引號(hào),支持( { [ < ' " `,選中后,"加上你想要添加的符號(hào),比如選中abc
后,"(,得到(abc)

snippetEmu.vim
擴(kuò)展了vim的abbr縮寫(xiě)功能,支持占位符,支持變量替換,強(qiáng)烈推薦

taglist.vim
vim的代碼瀏覽器,生成函數(shù)列表,支持跳轉(zhuǎn),可以根據(jù)光標(biāo)λ置查詢到當(dāng)前的函數(shù)名,使用
vim的程序員必備!個(gè)人認(rèn)為是最偉大的插件之一

utl.vim
給vim增加url的識(shí)別功能,但是功能遠(yuǎn)不只是支持url,還有更多,詳情見(jiàn)utl的幫助

vcscommand.vim
給vim整合了cvs/subversion功能,不用離開(kāi)vim環(huán)境也能執(zhí)行常用的cvs/subversion操作了

viki.vim
vim的wiki,沒(méi)怎么用過(guò),據(jù)說(shuō)很好用,詳情可以看滇狐的主頁(yè)
http://edyfox.codecarver.org/html/viki.html

vis.vim
可以對(duì)選中的文本塊執(zhí)行ex操作,尤其是visual block模式下,vim自己是不支持的.選中后,
:B 加上ex命令

visincr.vim
給vim增加生成遞增或者遞減數(shù)列的功能,支持十進(jìn)制,十六進(jìn)制,日期,星期等,功能強(qiáng)大靈活

winmanager.vim
給vim增加IDE的功能,提供目錄瀏覽和buffer瀏覽功能,因?yàn)轱@示器太小,感覺(jué)太占空間,所以
單獨(dú)使用bufexplorer,而且現(xiàn)在vim7的netrw功能也夠強(qiáng)大,所以感覺(jué)比較雞肋,而且貌似很
久沒(méi)有更新,所以基本不用

yankring.vim
類(lèi)似emacs的king ring,給vim的yank也增加緩沖,vim本身只緩沖刪除的字符串,不緩沖yank
的內(nèi)容

Posted by 1+1=2 at 6:24 AM 0 comments ?

Labels: vim

Tuesday, October 10, 2006
VIM 新手指南(zz)

術(shù)語(yǔ)約定: 如果沒(méi)有特殊說(shuō)明, 本文中提到的 VIM 指的是圖形界面的 gvim 與字符界面的 vim 的統(tǒng)稱(chēng), gvim 專(zhuān)指圖形界面, vim 專(zhuān)指字符界面。

1.從官方網(wǎng)站(http://www.vim.org/download.php)下載windows版本的gvim安裝。

2.下載中文幫助文檔安裝文件(http://vimcdoc.sourceforge.net/),這個(gè)(http://vcd.gro.clinux.org/)是簡(jiǎn)體中文的鏡像站點(diǎn)。

注意:如果安裝vim的中文幫助,安裝完成后第一次自動(dòng)啟動(dòng)時(shí)可以使用中文的,但退出后又還原為英文了,如果出現(xiàn)這種情況,只要把"vim"vimfiles"doc下的tags-cn另存為tags,再試試吧,中文出現(xiàn)了。
1 讓 gvim 正常工作

VIM 是一個(gè)非常強(qiáng)大的編輯器, 可惜的是, 無(wú)論是 Windows 還是 Linux, gvim 都存在一些小故障,令第一眼看到它的初學(xué)者感到非常不愉快。 為了不讓更多的初學(xué)者在第一次接觸 gvim 時(shí)被它嚇跑, 我在這份教程中首先解決 gvim 令人感到不快的一些小問(wèn)題, 希望能讓更多的用戶平滑地過(guò)渡到 gvim 的環(huán)境中來(lái)。

VIM 的安裝很簡(jiǎn)單, Windows 下只要雙擊安裝程序, 一路 next 下去就可以了 (注意到選擇安裝組件的時(shí)候請(qǐng)選擇全部組件, 默認(rèn)安裝方式下會(huì)少裝幾個(gè)有用的小東西)。 Linux 下各個(gè)發(fā)行版安裝方式都不一樣, 但總體來(lái)說(shuō)都不難裝。 因此, 本文假設(shè)你已經(jīng)成功地安裝了一份 VIM, 不再介紹 VIM 的安裝步驟。
1.1 屏蔽系統(tǒng)自帶的 .vimrc

VIM 是一個(gè)高度可定制的編輯器, 它通過(guò)配置文件 .vimrc (Windows 下是 _vimrc)來(lái)定制程序的各種行為。 如果你沒(méi)有編寫(xiě) .vimrc 的話, 它會(huì)使用系統(tǒng)自帶的一份默認(rèn)配置文件。 可惜的是, 系統(tǒng)默認(rèn)的配置文件存在種種很令人不快的問(wèn)題。 例如 Windows 下加載 mswin.vim 帶來(lái)的困惑, 和 Linux 下無(wú)法處理中文等等故障。 因此, 我們?cè)诎惭b了 VIM 之后, 第一件要做的事情就是創(chuàng)建自己的 .vimrc。 只要編寫(xiě)一份你自己的配置文件, VIM 便不會(huì)再加載系統(tǒng)自帶的配置文件。

如果你是 Linux 用戶, 請(qǐng)?jiān)谀愕?$HOME 目錄下放置一個(gè)空文件, 文件名叫 .vimrc, 方法如下:

$ cd??????????????????????????? # 使用不帶參數(shù)的 cd 命令,切換到 $HOME 目錄
$ touch .vimrc????????????????? # 使用 touch 命令創(chuàng)建一個(gè)空白文件

如果你是 Windows 用戶, 請(qǐng)?jiān)谀愕?%HOME% 目錄下放置一個(gè)空文件, 文件名叫 _vimrc。 步驟如下:

?? 1. 在資源管理器中切換到 %HOME% 目錄;
?? 2. 右鍵單擊文件列表的空白位置, 選擇“新建”→“文本文件”;
?? 3. 將“新建文本文件.txt”重命名為“_vimrc”, 注意顯示擴(kuò)展名的問(wèn)題。

現(xiàn)在, 我們已經(jīng)創(chuàng)建了一份自己的 .vimrc。 在之后的部分里, 我們將逐漸往 .vimrc 里添加一些屬于我們自己的內(nèi)容, 得到一份真正屬于自己的配置。
1.2 Linux 下的中文處理

這一節(jié)是為 Linux 用戶準(zhǔn)備的, 如果你是 Windows 用戶, 請(qǐng)直接跳過(guò)這一節(jié)。

在 許多 Linux 發(fā)行版里, gvim 默認(rèn)是不支持漢字的, 這給許多初學(xué)者留下了非常不好的印象。 其實(shí), VIM 支持的語(yǔ)言非常之多,遠(yuǎn)遠(yuǎn)超乎我們想象。 之所以不能處理中文, 只是因?yàn)槲覀儧](méi)有正確地配置它。 在正式開(kāi)始工作以前, 我們首先將中文處理問(wèn)題解決。這段里面會(huì)出現(xiàn)一些如“Normal 模式”、 “Insert 模式”等術(shù)語(yǔ), 看不明白也不要緊, vimtutor 里面會(huì)詳細(xì)解釋?zhuān)谶@章內(nèi)只要照著做就可以了, 不用深究這些詞的含義。

打開(kāi) gvim, 在鍵盤(pán)上按“i”進(jìn)入 Insert 模式,然后試著輸入一段中文。 如果正常的話, 恭喜, 你可以跳過(guò)本段, 直接進(jìn)入下一段。 如果不能正常輸入, 也不要?dú)怵H, 先按 ESC, 回到 Normal 狀態(tài)。 然后在鍵盤(pán)上輸入“:set encoding=cp936”, 然后回車(chē)。 注意, 當(dāng)你按下“:”的時(shí)候, VIM 就會(huì)自動(dòng)切換到“Command 模式”, 光標(biāo)會(huì)跳到窗口最下方。 冒號(hào)“:”之后的部分就是命令的正文。 回車(chē)之后, 這條命令就被 VIM 執(zhí)行了。 這時(shí)再按下字母 i 進(jìn)入 Insert 模式, 輸入一段漢字, 如果不出意外的話, 漢字顯示應(yīng)該已經(jīng)正常。 如果還不正常的話,請(qǐng)與滇狐聯(lián)系。

現(xiàn)在你的 gvim 應(yīng)該能夠正常輸入漢字了, 接下來(lái)請(qǐng)看一下 gvim 的菜單能不能正常地顯示漢字,如果能的話, 恭喜, 請(qǐng)繼續(xù)跳過(guò)這一節(jié)。 如果不能的話, 我們繼續(xù)進(jìn)行下面的操作。 首先按三次 ESC 鍵, 確認(rèn) VIM 已經(jīng)處在 Normal 模式下, 然后在鍵盤(pán)上輸入“:so $VIMRUNTIME/delmenu.vim”, 回車(chē)后會(huì)發(fā)現(xiàn), gvim 的菜單沒(méi)有了。繼續(xù)輸入“:so $VIMRUNTIME/menu.vim”, 回車(chē), 這時(shí) gvim 的菜單又回來(lái)了, 而且菜單中文顯示也正常了。
1.3 選擇自己喜歡的字體

如果覺(jué)得 gvim 的字體顯示效果不好的話, 不妨重新選擇一個(gè)你喜歡的字體。 點(diǎn)“編輯”→“選擇字體”,然后在字體列表中選擇一個(gè)你最中意的字體和字號(hào), 確認(rèn)后就可以了。 由于 gvim 只能使用等寬字體,因此對(duì)話框中列出的字體可能比你系統(tǒng)里安裝的字體要少得多, 請(qǐng)慢慢選擇, 耐心選, 直到選出最滿意的字體為止。 選擇完畢后, 先按幾下 ESC 確認(rèn)處在 Normal 模式下, 然后輸入這條命令:“:set guifont?” (這里的問(wèn)號(hào)代表詢問(wèn), 不要漏寫(xiě)), 回車(chē)后 gvim 屏幕最下方會(huì)顯示出你當(dāng)前所用的字體的名稱(chēng), 例如在滇狐這里輸入這條命令后出來(lái)的結(jié)果如下:

? guifont=Courier 9

請(qǐng)記住這里輸出的字體名稱(chēng), 如果必要的話請(qǐng)先暫時(shí)把它寫(xiě)下來(lái)備用, 之后我們需要將它寫(xiě)入配置文件。
1.4 將配置寫(xiě)入 .vimrc

之 前我們通過(guò)一系列命令, 將 gvim 調(diào)整為一個(gè)比較適合我們使用的編輯環(huán)境。 然而, gvim 是不會(huì)自動(dòng)記住我們這次所做的調(diào)整的。下次再打開(kāi) gvim 時(shí), 它又變回了原先的模樣。 如果我們能夠把剛才所輸入的命令記錄下來(lái), 下次再打開(kāi) gvim 的時(shí)候把那些命令再執(zhí)行一遍, 不就可以讓 gvim 每次都保持我們調(diào)整過(guò)的最佳工作狀態(tài)了么? 對(duì), 這就是配置文件 .vimrc 的作用。

剛才我們已經(jīng)創(chuàng)建了一 個(gè)全空的配置文件 .vimrc, 現(xiàn)在我們往配置文件中寫(xiě)下我們的自己的配置代碼。 .vimrc 的格式很簡(jiǎn)單,只要將剛才輸入的所有冒號(hào)開(kāi)頭的命令, 依次寫(xiě)入 .vimrc 即可, 寫(xiě)到配置文件里的時(shí)候就不要寫(xiě)冒號(hào)了。 VIM 啟動(dòng)的時(shí)候會(huì)依次執(zhí)行這些命令。 另外, 配置文件中雙引號(hào)開(kāi)頭的行表示注釋?zhuān)?在 VIM 讀入 .vimrc 的時(shí)候, 這些行不會(huì)被執(zhí)行。因此你可以使用注釋在 .vimrc 中寫(xiě)上一些說(shuō)明文字, 為自己將來(lái)閱讀配置文件提供方便。 再次復(fù)習(xí)一下前幾節(jié)的內(nèi)容, 然后寫(xiě)下自己的 .vimrc, 你現(xiàn)在的 .vimrc 可能是這個(gè)樣子的:

" Windows 下建議也加上這句
set encoding=cp936

" 這兩句只在 Linux 下需要
so $VIMRUNTIME/delmenu.vim
so $VIMRUNTIME/menu.vim

" 設(shè)置字體。
" 字體名稱(chēng)可以通過(guò)前一節(jié)介紹的語(yǔ)句獲得,
" 如果字體名稱(chēng)中含有空格,
" 需要在空格前面加上一個(gè)反斜杠,如下:
set guifont=Courier" 9

提示: 如果對(duì) VIM 的基本操作一無(wú)所知的話, 現(xiàn)在你可以不妨先使用其它文本編輯器編寫(xiě) .vimrc, 如記事本等。 當(dāng)然, 如果你愿意現(xiàn)在就嘗試著使用 gvim 編輯這個(gè)文件的話, 也是非常值得鼓勵(lì)的。
2 入門(mén)學(xué)習(xí)
2.1 vimtutor

vimtutor 是一個(gè)非常適合初學(xué)者學(xué)習(xí) VIM 的簡(jiǎn)易教程。 教程中說(shuō)閱讀一遍這個(gè)教程需要 25 到 30 分鐘, 其實(shí)很少有人需要這么長(zhǎng)時(shí)間。一般情況下, 如果精力集中的話, 15 到 20 分鐘足以將這份教程從頭到尾閱讀一遍。 每天花 15 分鐘時(shí)間將這份教程從頭到尾看一遍,平時(shí)進(jìn)行純文本編輯的時(shí)候, 盡量“逼迫”自己多使用 gvim, 花一周時(shí)間, 就可以比較熟悉 gvim, 能夠用它完成普通的編輯工作了。

Linux 下的 vimtutor 是在終端中打開(kāi)的, 如果終端字體配置正常, 一般情況下不會(huì)出現(xiàn)什么太大問(wèn)題。 Windows 下的 vimtutor 會(huì)彈出一個(gè) gvim 窗口, 大部分情況下也沒(méi)有什么大問(wèn)題, 在少部分機(jī)器上漢字會(huì)出現(xiàn)亂碼。 如果 vimtutor 在你機(jī)器上顯示不正常的話, 請(qǐng)先輸入“:set encoding=cp936”, 回車(chē), 然后再點(diǎn)擊“編輯”→“選擇字體”,選擇一個(gè)支持中文的字體, 如“新宋體”等, 確認(rèn)后, 教程的顯示應(yīng)該就恢復(fù)正常了。

如果你以前從來(lái)沒(méi)有使用過(guò) VIM 的話, 請(qǐng)先花 15 分鐘時(shí)間閱讀一遍 vimtutor, 然后再繼續(xù)往后閱讀滇狐教程。 之后的部分再出現(xiàn) vimtutor 里介紹過(guò)的術(shù)語(yǔ)時(shí), 滇狐將不再作解釋。

注意: 為了保證 vimtutor 在任何機(jī)器上運(yùn)行效果都相同, 不會(huì)被本地設(shè)置的鍵綁定所干擾, vimtutor 運(yùn)行時(shí)不會(huì)讀取任何用戶自定義的配置文件 .vimrc。 因此如果你之前做的設(shè)置在 vimtutor 里沒(méi)有效果的話, 請(qǐng)不要太過(guò)于驚慌。
2.2 VIM 快速編輯示例

學(xué)習(xí) VIM 其實(shí)是一件比較辛苦的事情, 剛開(kāi)始的時(shí)候可能比用記事本還慢。 因此, 在學(xué)會(huì) VIM 之前, 我們有必要先通過(guò)一些例子堅(jiān)定一下信心。

VIM 的一大特點(diǎn)就是“快”。 這里列舉了一些使用 VIM 能夠快速完成, 而一些其它編輯器難以勝任的功能, 體現(xiàn) VIM 的優(yōu)越性。
3 編寫(xiě)自己的 .vimrc

作為一個(gè)高度可定制的編輯器, 為 VIM 編寫(xiě)適合自己使用的 .vimrc 是有必要的。 這里給出了一個(gè)適合初學(xué)者使用的 .vimrc 框架, 以及每一項(xiàng)設(shè)置的詳細(xì)解釋?zhuān)?希望能給大家?guī)?lái)一些幫助。

這里是滇狐自己的 .vimrc, 里面有很多根據(jù)滇狐自己的習(xí)慣所做的設(shè)置。 如果你希望在自己機(jī)器上使用的話, 需要根據(jù)你的習(xí)慣做一些修改。
4 VIM 進(jìn)階

通 過(guò)一個(gè)星期的努力, 把 vimtutor 中的基本命令都熟練掌握后, 使用 VIM 進(jìn)行簡(jiǎn)單快速的編輯應(yīng)該已經(jīng)沒(méi)有什么問(wèn)題了。 接下來(lái),可以每天抽出半個(gè)小時(shí)時(shí)間, 在半個(gè)月左右內(nèi)把 VIM 用戶手冊(cè)大概閱讀一遍。 在 VIM 中 Normal 模式下輸入“:help usr_toc”即可看到用戶手冊(cè), 如果更習(xí)慣看中文版的話, 可以到這里下載。

記住, 沒(méi)有必要記住手冊(cè)中的所有命令, 只要大概知道有哪些命令, 需要用的之后知道到哪一章去查就可以了。 常用的命令查過(guò)幾次之后自然而然就能夠記住, 不常用的命令記下來(lái)也沒(méi)有什么意義。

另外, 可以根據(jù)自己的需要, 下載一些常用的 VIM 插件, 方便自己的日常生活與工作。 這里有滇狐整理的 VIM 常用插件推薦, 感興趣的話可以看看。

如果對(duì) VIM 還有更加濃厚的興趣的話, 可以試著自己編寫(xiě) VIM 插件, 不過(guò)那些內(nèi)容就不是這篇文章能夠涉及的了。 祝大家好運(yùn)! Happy VIMming~

VIM參數(shù)解釋

VIM 中可供用戶定制的選項(xiàng)非常非常多, 作為初學(xué)者, 我們沒(méi)有必要了解這么多東西。
下面, 滇狐簡(jiǎn)單列出了一些最常用的配置項(xiàng), 大家可以根據(jù)自己的需要將這些內(nèi)容添加到自己的
.vimrc 中。



1 基本設(shè)置


??? *



????? set nocp

????? 該命令指定讓 VIM 工作在不兼容模式下。 在 VIM 之前, 出現(xiàn)過(guò)一個(gè)非常流行的編輯器叫
????? vi。 VIM 許多操作與 vi 很相似, 但也有許多操作與 vi 是不一樣的。 如果使用“:set
????? cp”命令打開(kāi)了兼容模式開(kāi)關(guān)的話, VIM 將盡可能地模仿 vi 的操作模式。

????? 也許有許多人喜歡“最正統(tǒng)的 vi”的操作模式, 對(duì)于初學(xué)者來(lái)說(shuō), vi 里許多操作是比較不方便的。

????? 舉一個(gè)例子, VIM 里允許在 Insert 模式下使用方向鍵移動(dòng)光標(biāo), 而 vi 里在
????? Insert 模式下是不能移動(dòng)光標(biāo)的, 必須使用 ESC 退回到 Normal 模式下才行。

????? 再舉一個(gè)例子, vi 里使用 u 命令可以撤消一次先前的操作, 再次按下 u
????? 時(shí), 將撤消“撤消”這個(gè)動(dòng)作本身, 也就是我們常說(shuō)的“重復(fù)”(redo)。
????? 而 VIM 里可以使用 u 命令撤消多步操作, “重復(fù)”使用的快捷鍵是 Ctrl
????? + R。

????? 使用兼容模式后, VIM 將放棄這些新的功能, 盡量模仿 vi 的各種操作方式。
????? 只有在不兼容模式下, 才能更好地發(fā)揮 VIM 自身的特點(diǎn)。 Bram 爺爺強(qiáng)烈推薦大家使用
????? VIM 的不兼容模式, 滇狐也是這樣推薦的。 請(qǐng)務(wù)必在你的 .vimrc 中的第一行寫(xiě)上:
????? “set nocp”。
??? *

????? set ru

????? 該命令打開(kāi) VIM 的狀態(tài)欄標(biāo)尺。 默認(rèn)情況下, VIM 的狀態(tài)欄標(biāo)尺在屏幕底部,
????? 它能即時(shí)顯示當(dāng)前光標(biāo)所在位置在文件中的行號(hào)、列號(hào), 以及對(duì)應(yīng)的整個(gè)文件的百分比。
????? 打開(kāi)標(biāo)尺可以給文件的編輯工作帶來(lái)一定方便。
??? *

????? set hls

????? 搜索時(shí)高亮顯示被找到的文本。 該指令的功能在 vimtutor 中已經(jīng)有過(guò)介紹,
????? 這里就不多說(shuō)了。 其實(shí)似乎許多人并不喜歡這個(gè)功能。
??? *

????? set is

????? 搜索時(shí)在未完全輸入完畢要檢索的文本時(shí)就開(kāi)始檢索。 vimtutor 對(duì)該命令也有過(guò)介紹,
????? 滇狐并不喜歡這個(gè)功能, 因此滇狐自己的配置文件里是沒(méi)有這條命令的。 但是周?chē)信笥押芟矚g這個(gè),
????? 因此滇狐還是將它列在這里。
??? *

????? syntax on

????? 打開(kāi)關(guān)鍵字上色。 進(jìn)行程序設(shè)計(jì)的朋友應(yīng)該都知道關(guān)鍵字上色是什么東西,
????? 因此這里就不多說(shuō)了。 不進(jìn)行程序設(shè)計(jì)的朋友不妨也打開(kāi)這個(gè)功能, 雖然不一定能夠用得著,
????? 但這個(gè)功能其實(shí)也是很好玩的。
??? *

????? set backspace=indent,eol,start

????? 設(shè)想這樣一個(gè)情況: 當(dāng)前光標(biāo)前面有若干字母, 我們按下 i 鍵進(jìn)入了 Insert
????? 模式, 然后輸入了 3 個(gè)字母, 再按 5 下刪除(Backspace)。 默認(rèn)情況下,
????? VIM 僅能刪除我們新輸入的 3 個(gè)字母, 然后喇叭“嘟嘟”響兩聲。 如果我們“set
????? backspace=start”, 則可以在刪除了新輸入的 3 個(gè)字母之后, 繼續(xù)向前刪除原有的兩個(gè)字符。

????? 再設(shè)想一個(gè)情況: 有若干行文字, 我們把光標(biāo)移到中間某一行的行首, 按
????? i 鍵進(jìn)入 Insert 模式, 然后按一下 Backspace。 默認(rèn)情況下, 喇叭會(huì)“嘟”一聲,
????? 然后沒(méi)有任何動(dòng)靜。 如果我們“set backspace=eol”, 則可以刪除前一行行末的回車(chē),
????? 也就是說(shuō)將兩行拼接起來(lái)。

????? 當(dāng)我們?cè)O(shè)置了自動(dòng)縮進(jìn)后, 如果前一行縮進(jìn)了一定距離, 按下回車(chē)后, 下一行也會(huì)保持相同的縮進(jìn)。
????? 默認(rèn)情況下, 我們不能在 Insert 模式下直接按 Backspace 刪除行首的縮進(jìn)。
????? 如果我們“set backspace=indent”, 則可以開(kāi)啟這一項(xiàng)功能。

????? 上述三項(xiàng)功能, 你可以根據(jù)自己的需要, 選擇其中一種或幾種, 用逗號(hào)分隔各個(gè)選項(xiàng)。
????? 建議把這三個(gè)選項(xiàng)都選上。
??? *

????? set whichwrap=b,s,<,>,[,]

????? 默認(rèn)情況下, 在 VIM 中當(dāng)光標(biāo)移到一行最左邊的時(shí)候, 我們繼續(xù)按左鍵,
????? 光標(biāo)不能回到上一行的最右邊。 同樣地, 光標(biāo)到了一行最右邊的時(shí)候, 我們不能通過(guò)繼續(xù)按右跳到下一行的最左邊。
????? 但是, 通過(guò)設(shè)置 whichwrap 我們可以對(duì)一部分按鍵開(kāi)啟這項(xiàng)功能。 如果想對(duì)某一個(gè)或幾個(gè)按鍵開(kāi)啟到頭后自動(dòng)折向下一行的功能,
????? 可以把需要開(kāi)啟的鍵的代號(hào)寫(xiě)到 whichwrap 的參數(shù)列表中, 各個(gè)鍵之間使用逗號(hào)分隔。
????? 以下是 whichwrap 支持的按鍵名稱(chēng)列表:
????????? o

??????????? b

??????????? 在 Normal 或 Visual 模式下按刪除(Backspace)鍵。
????????? o

??????????? s

??????????? 在 Normal 或 Visual 模式下按空格鍵。
????????? o

??????????? h

??????????? 在 Normal 或 Visual 模式下按 h 鍵。
????????? o

??????????? l

??????????? 在 Normal 或 Visual 模式下按 l 鍵。
????????? o

??????????? <

??????????? 在 Normal 或 Visual 模式下按左方向鍵。
????????? o

??????????? >

??????????? 在 Normal 或 Visual 模式下按右方向鍵。
????????? o

??????????? ~

??????????? 在 Normal 模式下按 ~ 鍵(翻轉(zhuǎn)當(dāng)前字母大小寫(xiě))。
????????? o

??????????? [

??????????? 在 Insert 或 Replace 模式下按左方向鍵。
????????? o

??????????? ]

??????????? 在 Insert 或 Replace 模式下按右方向鍵。

??? *


????? set encoding=cp936

????? 設(shè)置當(dāng)前字符編碼為簡(jiǎn)體中文。 這里還有一段能夠自動(dòng)判斷文件的 encoding,
????? 自動(dòng)選擇合適的編碼的 .vimrc 代碼, 感興趣的話可以放到自己的配置文件中使用:




" Encoding settings
if has("multi_byte")
??? " Set fileencoding priority
?? if getfsize(expand("%")) > 0
?????? set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
?? else
?????? set fileencodings=cp936,big5,euc-jp,euc-kr,latin1
?? endif

??? " CJK environment detection and corresponding setting
?? if v:lang =~ "^zh_CN"
??????? " Use cp936 to support GBK, euc-cn == gb2312
?????? set encoding=cp936
?????? set termencoding=cp936
?????? set fileencoding=cp936
?? elseif v:lang =~ "^zh_TW"
??????? " cp950, big5 or euc-tw
??????? " Are they equal to each other?
?????? set encoding=big5
?????? set termencoding=big5
?????? set fileencoding=big5
?? elseif v:lang =~ "^ko"
??????? " Copied from someone's dotfile, untested
?????? set encoding=euc-kr
?????? set termencoding=euc-kr
?????? set fileencoding=euc-kr
?? elseif v:lang =~ "^ja_JP"
??????? " Copied from someone's dotfile, unteste
?????? set encoding=euc-jp
?????? set termencoding=euc-jp
?????? set fileencoding=euc-jp
?? endif
??? " Detect UTF-8 locale, and replace CJK setting if needed
?? if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
?????? set encoding=utf-8
?????? set termencoding=utf-8
?????? set fileencoding=utf-8
?? endif
else
?? echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif




2 文本編輯設(shè)置


??? *



????? set sw=4

????? 自動(dòng)縮進(jìn)的時(shí)候, 縮進(jìn)尺寸為 4 個(gè)空格。
??? *

????? set ts=4

????? Tab 寬度為 4 個(gè)字符。
??? *

????? set et

????? 編輯時(shí)將所有 Tab 替換為空格。

????? 該選項(xiàng)只在編輯時(shí)將 Tab 替換為空格, 如果打開(kāi)一個(gè)已經(jīng)存在的文件, 并不會(huì)將已有的
????? Tab 替換為空格。 如果希望進(jìn)行這樣的替換的話, 可以使用這條命令“:retab”。




3 斷行設(shè)置


??? *



????? set lbr

????? 不在單詞中間斷行。 設(shè)置了這個(gè)選項(xiàng)后, 如果一行文字非常長(zhǎng), 無(wú)法在一行內(nèi)顯示完的話,
????? 它會(huì)在單詞與單詞間的空白處斷開(kāi), 盡量不會(huì)把一個(gè)單詞分成兩截放在兩個(gè)不同的行里。
??? *

????? set fo+=mB

????? 打開(kāi)斷行模塊對(duì)亞洲語(yǔ)言支持。 m 表示允許在兩個(gè)漢字之間斷行, 即使?jié)h字之間沒(méi)有出現(xiàn)空格。
????? B 表示將兩行合并為一行的時(shí)候, 漢字與漢字之間不要補(bǔ)空格。 該命令支持的更多的選項(xiàng)請(qǐng)參看用戶手冊(cè)。




4 C/C++ 編碼設(shè)置


??? *



????? set sm

????? 顯示括號(hào)配對(duì)情況。 打開(kāi)這個(gè)選項(xiàng)后, 當(dāng)輸入后括號(hào) (包括小括號(hào)、中括號(hào)、大括號(hào))
????? 的時(shí)候, 光標(biāo)會(huì)跳回前括號(hào)片刻, 然后跳回來(lái), 以此顯示括號(hào)的配對(duì)情況。
??? *

????? set cin

????? 打開(kāi) C/C++ 風(fēng)格的自動(dòng)縮進(jìn)。 打開(kāi)了自動(dòng)縮進(jìn)后, 在編碼的時(shí)候我們可以使用“V”命令選中一段文本后,
????? 按“=”將這段文本重新調(diào)整縮進(jìn)格式, 在一定程度上起到代碼美化的作用。

????? 另外, 打開(kāi)了自動(dòng)縮進(jìn)后, 在使用 TERM 下的 vim 的時(shí), 粘貼代碼時(shí)常常會(huì)出現(xiàn)版式混亂的現(xiàn)象。
????? 那是因?yàn)?TERM 并不知道你現(xiàn)在正在粘貼代碼, 它直接“粘貼”動(dòng)作向 vim
????? 解釋為鍵入, 因此 vim 便按照設(shè)置的自動(dòng)縮進(jìn)格式為你的代碼調(diào)整了縮進(jìn)。
????? 不幸的是, 粘貼進(jìn)去的代碼中本身已經(jīng)包含了縮進(jìn), 因此便出現(xiàn)了版式混亂的情況。
????? 在 gvim 中就不會(huì)出現(xiàn)這個(gè)問(wèn)題, 因?yàn)樗軌蛑滥悻F(xiàn)在正在粘貼。

????? 知道了這個(gè)癥狀的來(lái)由, 解決方案也就顯而易見(jiàn)了: 在粘貼的時(shí)候把所有自動(dòng)縮進(jìn)都關(guān)閉,
????? 粘貼完畢之后再打開(kāi)。 一個(gè)個(gè)手工關(guān)閉自動(dòng)縮進(jìn)未免過(guò)于繁瑣, vim 為我們提供了一個(gè)很好用的命令,
????? 只要輸入“:set paste”, 就可以關(guān)閉所有自動(dòng)縮進(jìn)。 粘貼完畢后再輸入“:set
????? nopaste”就可以重新打開(kāi)原有的自動(dòng)縮進(jìn)設(shè)置了。
??? *

????? set cino=:0g0t0(sus

????? 設(shè)定 C/C++ 風(fēng)格自動(dòng)縮進(jìn)的選項(xiàng), 這里簡(jiǎn)要介紹一下這段代碼里用到的選項(xiàng)的含義,
????? cino 支持的選項(xiàng)還很多, 更多選項(xiàng)請(qǐng)看用戶手冊(cè)。




// :0
//
// switch 語(yǔ)句之下的 case 語(yǔ)句縮進(jìn) 0 個(gè)空格,也就是說(shuō)不縮進(jìn),與 switch 塊平
// 齊,使用這樣風(fēng)格:
switch (x)
{
case 1:
?? a = b;
?? break;
default:
}

// g0
//
// class、struct 等之下的訪問(wèn)權(quán)限控制語(yǔ)句,如 public、protected、private 等,
// 相對(duì) class、struct 等所在的塊縮進(jìn) 0 個(gè)空格,與 class 等塊平齊,使用這樣的
// 風(fēng)格:
class foo
{
public:
?? int a;
private:
?? int b;
};

// t0
//
// 如果函數(shù)返回值與函數(shù)名不在同一行,則返回值縮進(jìn) 0 個(gè)空格,也就是說(shuō)不縮進(jìn),如
// 下所示:

// set cino=t4
?? int
func1()
{
}

// set cino=t0
int
func()
{
}

// (sus
//
// 當(dāng)一對(duì)括號(hào)跨越多行時(shí),其后的行縮進(jìn)前面 sw 指定的距離,效果如下:
int a = (1 + 2 + 3
?? + 4 + 5 + 6
?? + 7 + 8) * 9;



??? *




????? set ai

????? 打開(kāi)普通文件類(lèi)型的自動(dòng)縮進(jìn)。 該自動(dòng)縮進(jìn)不如 cindent 智能, 但它可以為你編輯非
????? C/C++ 文件提供一定幫助。




5 其它設(shè)置


??? *



????? set selectmode=

????? 不使用 selectmode。
??? *

????? set mousemodel=popup

????? 當(dāng)右鍵單擊窗口的時(shí)候, 彈出快捷菜單。
??? *

????? set keymodel=

????? 不使用“Shift + 方向鍵”選擇文本, “Shift + 方向鍵”代表向指定方向跳一個(gè)單詞。
????? 如果你喜歡這項(xiàng)功能的話, 可以使用“set keymodel=startsel,stopsel”打開(kāi)它。
??? *

????? set selection=inclusive

????? 指定在選擇文本時(shí), 光標(biāo)所在位置也屬于被選中的范圍。 如果指定 selection=exclusive
????? 的話, 可能會(huì)出現(xiàn)某些文本無(wú)法被選中的情況。
??? *

????? colo torte

????? 選擇 torte 配色方案。 VIM 里內(nèi)置了許多關(guān)鍵字上色的配色方案, 另外你還可以到網(wǎng)上下載更多配色方案,
????? 或是自己編寫(xiě)。 點(diǎn)擊“編輯”→“調(diào)色板”, 就能列出所有支持的配色方案。
????? 你可以把“調(diào)色板”子菜單剪下來(lái), 然后慢慢選擇, 挑出一個(gè)你最喜歡的配色方案來(lái)。




6 圖形界面設(shè)置


??? *



????? set nowrap

????? 指定不折行。 如果一行太長(zhǎng), 超過(guò)屏幕寬度, 則向右邊延伸到屏幕外面。
????? 如果使用圖形界面的話, 指定不折行視覺(jué)效果會(huì)好得多。
??? *

????? set guioptions+=b

????? 添加水平滾動(dòng)條。 如果你指定了不折行, 那為窗口添加一個(gè)水平滾動(dòng)條就非常有必要了。
??? *

????? set guifont=Courier" 9

????? 設(shè)置圖形界面下的字體。 你可以點(diǎn)“編輯”→“選擇字體”, 然后在對(duì)話框中選出你喜歡的字體與字號(hào),
????? 選擇完畢后, 先按幾下 ESC 確認(rèn)處在 Normal 模式下, 然后輸入這條命令:“:set
????? guifont?” 回車(chē)后 gvim 屏幕最下方會(huì)顯示出你當(dāng)前所用的字體的名稱(chēng)與字號(hào)。
????? 將獲得的結(jié)果寫(xiě)到配置文件里面就可以了, 需要注意一點(diǎn), 如果字體名稱(chēng)里面含有空格的話,
????? 在抄的時(shí)候需要在所有空格前面加一個(gè)斜杠。




7 條件選擇


同一個(gè)配色方案, 在 gvim 下和字符界面的 vim 下效果大相徑庭, 滇狐個(gè)人的習(xí)慣是,
在 gvim 下使用 torte 配色方案, 在 vim 下使用 ron 配色方案。 因此我們有必要針對(duì)
gvim 和 vim 進(jìn)行不同的設(shè)置。


另外, 前面我們?cè)?gvim 下不使用折行, 開(kāi)啟水平滾動(dòng)條, 但在 vim 下,
是沒(méi)有滾動(dòng)條可用的, 因此還是有必要為 vim 保留自動(dòng)折行。


條件選擇設(shè)置的格式如下:



if (has("gui_running"))
" 圖形界面下的設(shè)置
?? set nowrap
?? set guioptions+=b
?? colo torte
else
" 字符界面下的設(shè)置
?? set wrap
?? colo ron
endif


以下是滇狐自己的 .vimrc, 有許多根據(jù)滇狐自己的習(xí)慣做的設(shè)置, 如果你要在自己機(jī)器上使用的話,
請(qǐng)根據(jù)你自己的習(xí)慣作出相應(yīng)修改。


另外, 這份 .vimrc 里面有許多設(shè)置是針對(duì)插件的, 只有安裝了相應(yīng)插件后,
這些配置才會(huì)起作用。 這里有滇狐使用的全部插件打包,
如果需要的話可以直接下載, Linux 用戶將該壓縮包解壓到 $HOME 目錄下即可使用,
Windows 用戶可以將壓縮包解壓后, 將解壓得到的 .vim 文件夾改名為 vimfiles,
然后復(fù)制到 VIM 的安裝路徑下, 覆蓋原有文件。



"=============================================================================
" General settings
"=============================================================================

set nocp
set ru
set cin
set sm
set ai
set sw=4
set ts=4
set et
set cino=:0g0t0(sus
set lbr
set hls
set backspace=indent,eol,start
set whichwrap=b,s,<,>,[,]
set fo+=mB
set selectmode=
set mousemodel=popup
set keymodel=
set selection=inclusive
set matchpairs+=<:>

" for gdbvim
set noshowcmd

" Encoding settings
if has("multi_byte")
??? " Set fileencoding priority
?? if getfsize(expand("%")) > 0
?????? set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
?? else
?????? set fileencodings=cp936,big5,euc-jp,euc-kr,latin1
?? endif

??? " CJK environment detection and corresponding setting
?? if v:lang =~ "^zh_CN"
??????? " Use cp936 to support GBK, euc-cn == gb2312
?????? set encoding=cp936
?????? set termencoding=cp936
?????? set fileencoding=cp936
?? elseif v:lang =~ "^zh_TW"
??????? " cp950, big5 or euc-tw
??????? " Are they equal to each other?
?????? set encoding=big5
?????? set termencoding=big5
?????? set fileencoding=big5
?? elseif v:lang =~ "^ko"
??????? " Copied from someone's dotfile, untested
?????? set encoding=euc-kr
?????? set termencoding=euc-kr
?????? set fileencoding=euc-kr
?? elseif v:lang =~ "^ja_JP"
??????? " Copied from someone's dotfile, unteste
?????? set encoding=euc-jp
?????? set termencoding=euc-jp
?????? set fileencoding=euc-jp
?? endif
??? " Detect UTF-8 locale, and replace CJK setting if needed
?? if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
?????? set encoding=utf-8
?????? set termencoding=utf-8
?????? set fileencoding=utf-8
?? endif
else
?? echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif

" Cursor movement
nnoremap <Down> gj
nnoremap <Up> gk
vnoremap <Down> gj
vnoremap <Up> gk
inoremap <Down> <C-o>gj
inoremap <Up> <C-o>gk

nnoremap <End> g$
nnoremap <Home> g0
vnoremap <End> g$
vnoremap <Home> g0
inoremap <End> <C-o>g$
inoremap <Home> <C-o>g0

nmap <C-F4> :confirm bd<CR>
vmap <C-F4> <ESC>:confirm bd
omap <C-F4> <ESC>:confirm bd
map! <C-F4> <ESC>:confirm bd

" Move lines
nmap <C-Down> :<C-u>move .+1<CR>
nmap <C-Up> :<C-u>move .-2<CR>

imap <C-Down> <C-o>:<C-u>move .+1<CR>
imap <C-Up> <C-o>:<C-u>move .-2<CR>

vmap <C-Down> :move '>+1<CR>gv
vmap <C-Up> :move '<-2<CR>gv

" Toggle line number
nmap <C-F12> :set nu!<CR>
imap <C-F12> <C-o>:set nu!<CR>

" Toggle spell check
" For VIM7 only
nmap <C-F11> :set spell!<CR>
imap <C-F11> <C-o>:set spell!<CR>

syntax on
if (has("gui_running"))
?? set nowrap
?? set guioptions+=b
?? colo torte
else
?? set wrap
?? colo ron
endif

" ============================================================================
" Plugins settings
" ============================================================================

" Sketch
command -nargs=0 ToggleSketch call ToggleSketch()

" WinManager
" let g:winManagerWindowLayout = "FileExplorer"

" Tlist
let Tlist_Use_Right_Window=1
let Tlist_File_Fold_Auto_Close=1

" A
let g:alternateNoDefaultAlternate=1
" VIM7 doesn't support this.
"let g:alternateExtensions_{"aspx"} = "aspx.cs,aspx.CS"
"let g:alternateExtensions_{"aspx.cs"} = "aspx,ASPX"

" LateXSuite
filetype plugin on
set grepprg=grep" -nH" $*

" Viki
let g:vikiNameSuffix=".viki"
augr viki
au!
au BufRead,BufNewFile *.viki set filetype=viki
augr END

"=============================================================================
" Functions
"=============================================================================

function TextWork()
?? set nocin
?? set nosm
?? set noai
?? set tw=78
?? set sw=8
?? set ts=8
?? set nowrap
endfunction

function NoTextWork()
?? set cin
?? set sm
?? set ai
?? set tw=0
?? set sw=4
?? set ts=4
?? if (!has("gui_running"))
?????? set wrap
?? endif
endfunction

function CodeWork()
?? call NoTextWork()
?? WManager
?? Tlist
endfunction

function TimeStamp()
?? let curposn= SaveWinPosn()
?? %s/"$Date: .*"$/"=strftime("$Date: %Y-%m-%d %H:%M:%S$")/ge
?? %s/Last Change: .*$/"=strftime("Last Change: %Y-%m-%d %H:%M:%S")/ge
?? %s/Last Modified: .*$/"=strftime("Last Modified: %Y-%m-%d %H:%M:%S")/ge
??? " Replace once and never update.
?? %s/Created: *$/"=strftime("Created: %Y-%m-%d %H:%M:%S")/ge
?? call RestoreWinPosn(curposn)
endfunction

function AutoTimeStamp()
?? augr tagdate
?? au!
?? au BufWritePre,FileWritePre * call TimeStamp()
?? augr END
endfunction
call AutoTimeStamp()

function NoAutoTimeStamp()
?? augr tagdate
?? au!
?? augr END
endfunction

"=============================================================================
" Commands
"=============================================================================

command -nargs=0 TextWork call TextWork()
command -nargs=0 NoTextWork call NoTextWork()
command -nargs=0 CodeWork call CodeWork()
command -nargs=0 TimeStamp call TimeStamp()
command -nargs=0 AutoTimeStamp call AutoTimeStamp()
command -nargs=0 NoAutoTimeStamp call NoAutoTimeStamp()

"=============================================================================
" Platform dependent settings
"=============================================================================

"-----------------------------------------------------------------------------
" Common
"-----------------------------------------------------------------------------

" Calender
let g:calendar_diary="/home/edward/document/diary"

" Spell Check
" VIM7 supports built-in spell check.
"function SpellCheck()
"??? !aspell --lang=en -c %
"endfunction
"command -nargs=0 SpellCheck call SpellCheck()

" Mail Template
function MailWork()
?? 0r ~/document/text/mailtemp.txt
?? %s/%%date%%/"=strftime("%Y-%m-%d")/ge
?? %s/%%cursor%%//ge
?? call TextWork()
endfunction
command -nargs=0 MailWork call MailWork()

" Use kittiemake as the default compiler
function Kittie()
?? set makeprg=kittiemake
endfunction
command -nargs=0 Kittie call Kittie()

" Don't use kittiemake as the default compiler
function NoKittie()
?? set makeprg=make
endfunction
command -nargs=0 NoKittie call NoKittie()

"-----------------------------------------------------------------------------
" Win32
"-----------------------------------------------------------------------------

"if (has("gui_running"))
"??? set guifont=新宋體:h9:cGB2312
"endif

" For LaTeX Suite
"let g:Tex_CompileRule_dvi="latex -src-specials -interaction=nonstopmode $*"
"set shellslash

" For tee
"set shellpipe=2>&1"|" tee

" VimTweak
"if (has("gui_running"))
"??? command -nargs=1 SetAlpha call libcallnr("vimtweak.dll",
"??????? ""SetAlpha", )
"??? command -nargs=0 TopMost call libcallnr("vimtweak.dll",
"??????? ""EnableTopMost", 1)
"??? command -nargs=0 NoTopMost call libcallnr("vimtweak.dll",
"??????? ""EnableTopMost", 0)
"endif

"-----------------------------------------------------------------------------
" Linux
"-----------------------------------------------------------------------------

"For LaTeX Suite
"function RemoteLaTeX()
"??? let g:Tex_ViewRule_dvi="xdvi -editor 'gvim --servername """
"??????? ".expand("%:p").""" --remote-silent'"
"??? augr remotelatex
"??? au!
"??? augr END
"endfunction

"augr remotelatex
"au!
"au BufRead * call RemoteLaTeX()
"augr END

let g:Tex_CompileRule_dvi
??? "="latex -src-specials -interaction=nonstopmode $*"
let g:Tex_ViewRule_dvi
??? "="xdvi -editor 'gvim --servername latex-suite --remote-silent'"

if (has("gui_running"))
?? set guifont=Bitstream" Vera" Sans" Mono" 9
?? source $VIMRUNTIME/delmenu.vim
?? source $VIMRUNTIME/menu.vim
endif

Posted by 1+1=2 at 10:00 PM 0 comments ?

Labels: vim

Monday, October 09, 2006
標(biāo)題: vim + ctags + taglist + cscope + cppcomplete + global 使用初探(zz)

由于本人比較喜歡在終端狀態(tài)下的vim,所以gvim下的擴(kuò)展使用的不多。這里介紹的也是我簡(jiǎn)單的使用以上擴(kuò)展的一點(diǎn)點(diǎn)體會(huì)。請(qǐng)大家指正。 emacs 不會(huì)用,也沒(méi)有比較過(guò)拉。



1、大體感覺(jué),(因?yàn)槭褂脮r(shí)間不長(zhǎng),不全面)
總體使用的感覺(jué)定位查找類(lèi)型定義基本可以用,但自動(dòng)補(bǔ)全類(lèi)型方面由于ctags的功能有限,感覺(jué)在大工程時(shí),不一定很好用。

大型程序一定要global的參與,它的分析比較全面,但在vim中的提示信息有限。

taglist 精干,需要ctags的支撐 ,直接可以在左邊列出函數(shù)列表,全局參數(shù)列表。(可以排序)

cscope 比較強(qiáng)大,可以對(duì)函數(shù)以及部分類(lèi)型定義進(jìn)行跳轉(zhuǎn),但有些BUG,好像在某些條件下無(wú)法正確找到分析枚舉的定義。

cppcomplete 需要ctags的支撐,可以補(bǔ)全類(lèi)型或者函數(shù)名(可不是普通Ctrl+P/N的那種)

global 新版本可以嵌入vim使用,提供比較完整解析和類(lèi)型索引,和cscope比,稍微差些的就是對(duì)類(lèi)型引用的打印列表中沒(méi)有標(biāo)識(shí)這個(gè)引用在什么函數(shù)中進(jìn)行的。 其實(shí)我的感覺(jué)global可能不是為vim所生,它的主要目的是用html的方式進(jìn)行表達(dá)相關(guān)的關(guān)聯(lián)關(guān)系和索引,使用起來(lái)感覺(jué)沒(méi)有cscope的那么貼 切。



2、相關(guān)的擴(kuò)展的安裝
代碼:

apt-get install exuberant-ctags cscope global

cppcomplete 和 taglist 要到www.vim.org的擴(kuò)展列表中下載。

taglist 的下載地址:
http://www.vim.org/scripts/script.php?script_id=273
cppcomplete 的下載地址:
http://www.vim.org/scripts/script.php?script_id=527

然后在 建立目錄
代碼:

$HOME/.vim/plugin


將下載的cppcomplete.vim 和 taglist.vim拷貝到$HOME/.vim/plugin中。
安裝了global后,最新4.8.6 以上版本有帶vim的擴(kuò)展,將它也拷貝到 $HOME/.vim/plugin

debian sid 版本global安裝后擴(kuò)展文件在
代碼:

/usr/share/doc/global/examples/gtags.vim.gz

需要拷貝到$HOME/.vim/plugin后解壓,解壓方法:
代碼:

gzip -d gtags.vim.gz



3、使用這些工具
1)準(zhǔn)備工作,先修改一下$HOME/.vimrc文件

為了更好的使用cscope請(qǐng)?zhí)砑尤缦聝?nèi)容,這樣Ctrl-]的跳轉(zhuǎn)將由cscope的tags進(jìn)行分析。
代碼:

if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
set cscopetag
set cscopequickfix=s-,g-,c-,d-,t-,e-,f-,i-
endif


2)使用cscope
cscope的tag生成最簡(jiǎn)單的方法是:
在你的開(kāi)發(fā)工程的最上層目錄執(zhí)行cscope-indexer,它會(huì)遍歷下面的所有目錄,生成兩個(gè)文件,一個(gè)是cscope.files,這個(gè)文件記錄需要生成tags的文件名,可以手工修改,另一個(gè)是cscope格式的tags文件cscope.out。

完成后,你在生成了cscope.out的目錄打開(kāi)工程的任意文件,就可以使用Ctrl-]跳轉(zhuǎn)查找類(lèi)型定義了。
代碼:

cs f s xxxx 查找xxxx出現(xiàn)的地方,它能詳細(xì)列出哪些文件的哪行的哪個(gè)函數(shù)引用,以及該行的內(nèi)容,比較不錯(cuò)。 :)


它的所有命令的使用請(qǐng)參考:
代碼:

help cscope


3)使用taglist
taglist的功能是即時(shí)生成當(dāng)前文件的函數(shù)列表和全局變量列表,便于索引。
在vim中命令模式下使用
Tlist 打開(kāi)或者關(guān)閉當(dāng)前文件的索引;
TlistSync 立即在打開(kāi)的索引窗口中定位當(dāng)前的光標(biāo)所在位置屬于哪個(gè)函數(shù)或者結(jié)構(gòu)定義中。
還有其他命令,請(qǐng)參考它的幫助文件。

4)ctags的使用
其實(shí)cscope是用來(lái)替代ctags功能的,ctags的應(yīng)用廣泛,還有其他很多的軟件依賴它。

例如要生成cppcomplete需要的tags文件的話,需要運(yùn)行下面的命令:
代碼:

ctags -n -f cppcomplete.tags --fields=+ai --C++-types=+p * -L cscope.files

注意,我在最后使用了參數(shù)"-L cscope.files" 這僅僅是借用拉cscope生成的文件索引來(lái)幫助ctags去查詢相關(guān)工程文件生成tags。

5)使用cppcomplete
cppcomplete的使用我只是簡(jiǎn)單的發(fā)現(xiàn)它可以根據(jù)上述方法生成的tags文件來(lái)自動(dòng)補(bǔ)全類(lèi)型成員。
使用很簡(jiǎn)單,就是在你需要補(bǔ)全類(lèi)型成員時(shí),按F8鍵就可以拉。它一般第一次使用時(shí),需要讓你確認(rèn)是使用已有的tags文件還是再生成一次。一般我們自己控制生成tags文件的時(shí)機(jī),它就使用就行拉。
但它也受到ctags的分析能力比較差的限制,可能不是每次都能幫到你。

6)使用global
在工程的最上層目錄執(zhí)行命令:
gtags
等待它完成所有需要的global自己格式的tags的生成
生成完后,需要的就是在生成tags的目錄打開(kāi)你的工程的任意文件,用如下命令查詢相關(guān)類(lèi)型引用和關(guān)聯(lián)關(guān)系:
代碼:

Gtags xxxx 查找xxxx的定義
Gtags -r xxxx 查找xxxx的引用
Gtags -s xxxx 查找xxxx出現(xiàn)的地方


它的提示信息很有顯,不如cscope更直觀,但對(duì)大型分析的比較完整。
有時(shí)它無(wú)法正常分析的類(lèi)型 可以試試用帶-s 的參數(shù)的方式找找類(lèi)型定義。再不行,我就不清楚拉


4、草草的收尾
我使用它們也是一點(diǎn)一點(diǎn)的摸索的沒(méi)有系統(tǒng)的完整的使用過(guò),也受限于本人的Linux使用經(jīng)驗(yàn)和工作關(guān)系,所以非常簡(jiǎn)單的使用體會(huì)給大家一個(gè)參考,希望能有所幫助。更希望后來(lái)者能不斷補(bǔ)充相關(guān)的使用體會(huì)。大家都需要交流提高,呵呵。

Posted by 1+1=2 at 4:47 AM 0 comments ?

Labels: vim

Ctags with Vim

標(biāo) 題: Ctags with Vim
發(fā)信站: BBS 水木清華站 (Mon May 24 08:42:57 2004), 站內(nèi)


usage: $ctags [-R] inc_dir/*.h include_dir/*.hpp src_dir/*.c
example: $ ctags -R `find . -name "*.c"` `find . -name "*.h"`
su; cd /usr/include; ctags --c-types=+p+x -sort -R
生成非常完整,巨大而有序的tags

各用戶在 ~/.vimrc中添加set tags= ./tags, tags, /usr/include/tags即可使用
[注1]+p開(kāi)關(guān)會(huì)跳到變量聲明的地方而不是它的實(shí)現(xiàn),所以還是采用缺省值,
不要--c-types這個(gè)選項(xiàng),或者只要+x(推薦),其它無(wú)所謂。
還有/usr/include并不是/usr/src/linux/include的一個(gè)符號(hào)鏈接,
所以如果是看內(nèi)核中一些變量的定義的話應(yīng)該到/usr/src/linux上面用ctags

ctags瀏覽代碼 (有的命令說(shuō)明可能不準(zhǔn)確)
:set tags=/Dir/tags 設(shè)置需要的tags文件,
可以多個(gè):set tags=/dir1/tags, /dir2/tags
:tag xxx 轉(zhuǎn)到滿足查找代碼的定義處,簡(jiǎn)寫(xiě)為 :ta xxx
:tag /^xxx 轉(zhuǎn)到以xxx為起始的tag處
other find tags :stag/ptag/ts/tj/pts/ptj /
:tag /xxx 列出所有包含xxx的tag
:tag 轉(zhuǎn)到前一個(gè)瀏覽過(guò)的tag處
vi -t xxx 直接定位到xxx的定義處
:tn / :tp 轉(zhuǎn)到下/上一個(gè)tag代碼處,可以使用:5tn的形式
:tr / :tl 轉(zhuǎn)到首/尾tag代碼處
, 轉(zhuǎn)到光標(biāo)所在函數(shù)或者變量的定義處 g+左鍵 (GUI) [注2]
, 回到跳轉(zhuǎn)前的代碼處(適用于任何跳轉(zhuǎn)) g+右鍵 (GUI)
:tags 列出當(dāng)前tag棧的內(nèi)容
:ts xxx 列出所有匹配的代碼及其所屬文件,并提供選擇瀏覽
:sts xxx 列出匹配處提供選擇在新窗口中打開(kāi)文件
:tj xxx 類(lèi)似 :ts xxx,當(dāng)只有一個(gè)匹配時(shí)直接轉(zhuǎn)到代碼處
g] 與 :ts xxx 功能相同(tag為光標(biāo)下的標(biāo)識(shí)符)
g] 等價(jià)于 :sts xxx
g 等價(jià)于 :tj xxx
:pt? xxx 提供上述命令(?為j,s)的預(yù)覽功能,退出窗口 :q!
:t?! xxx 當(dāng)前文件的修改被丟棄轉(zhuǎn)到目標(biāo)文件中
} 在預(yù)覽窗口中顯示當(dāng)前光標(biāo)下的tag
:ptl / ptf / ptn /ptp 類(lèi)似于 tl,tf,tn,tp
:che 察看沒(méi)有找到的頭文件(checkpath)
makeprg :set makeprg=gcc" yourfile.c 為在線編譯設(shè)置
:make 在線編譯
:cn / :cN 移動(dòng)到編譯的 下/上 一個(gè)error處
:stag xxx 查找xxx的聲明處并在新窗口中打開(kāi)
:ta {ident} 跳轉(zhuǎn)到標(biāo)識(shí)符定義處
gd 跳轉(zhuǎn)到局部標(biāo)識(shí)符定義處

[注2] Ctrl-]碰巧是telnet的終端符,如果遠(yuǎn)程編輯文件可能會(huì)遇到一些問(wèn)題,
請(qǐng)參考在線幫助:h ^]。多數(shù)telnet都允許使用命令telnet -E hostname來(lái)打開(kāi)
或關(guān)閉該脫字符,或者用telnet -e escape hostname來(lái)指定另外一個(gè)脫字符
來(lái)代替^],請(qǐng)man telnet參看-E -e的幫助。

某人常用vim插件(zz)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久国语 | 99热这里只有免费国产精品 | 99久久一区 | 成人在线视频国产 | 综合久| 久青草国产手机在线视频 | 在线亚洲精品国产波多野结衣 | a免费网站 | 大咪咪在线| 免费欧美在线视频 | 香蕉视频网站在线观看 | 美女精品久久久久久国产潘金莲 | 亚洲欧美精选 | 越南黄色录像 | 国产精品福利自产拍网站 | 久久日本精品99久久久 | 国产成人精品视频免费 | 欧美在线日韩在线 | 伊人久久国产精品 | 青青热久免费精品视频在线观看 | 婷婷成人综合 | 成年人精品视频 | 欧美特级毛片a够爽 | 欧美日韩另类综合 | 伊人久久综在合线亚洲91 | 亚洲精品图区 | 亚洲精品久久精品h成人 | 久久春色| 亚洲欧美日韩国产一区二区精品 | 天码毛片一区二区三区入口 | 亚洲色婷婷综合开心网 | 欧美大片日韩精品四虎影视 | 久久在线一区 | 亚洲国产九九精品一区二区 | 久久精品国产欧美日韩99热 | 在线免费观看一级毛片 | 欧美理论大片清免费观看 | 免费日韩在线视频 | 97免费在线观看视频 | 开心久久婷婷综合中文字幕 | 久久99国产精品成人 |