• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            vim/gvim學(xué)習(xí)

            Posted on 2007-12-09 23:41 T.S Liu 閱讀(11763) 評(píng)論(0)  編輯 收藏 引用
            不能不會(huì)的東西-------- VI/VIM
            轉(zhuǎn)自Forecho的blog 2007-11-29 15:54

            一、VIM的歷史

            1976年左右Bill Joy開發(fā)了vi,他也是伯克利大學(xué)的畢業(yè)生,后來他跟其他人一起成立了Sun Microsystems公司并成為了Sun的首席科學(xué)家。一開始Bill開發(fā)了ex,爾后開發(fā)了vi作為ex的visual interface,也就是說vi允許一次能看到一屏的文本而非一行,vi也因此得名。

            “早期,當(dāng)鍵盤和視頻終端成為最新的計(jì)算機(jī)交互手段時(shí),人們開發(fā)了VI。那時(shí)候的鍵盤不具有目前熟悉的全部功能鍵,所以,VI就設(shè)計(jì)成只需要打字機(jī)的鍵盤加上退出鍵就能完成對(duì)文本的輸入和修改(現(xiàn)在有的還接受一些其他的鍵輸入方式,如光標(biāo)控制鍵)。盡管看起來受了限制,不能充分利用現(xiàn)代鍵盤新增的許多鍵,可是‘禍中有福’,限制帶來的好處是手指不離開打字區(qū)就能完成所有的編輯工作。”

            技術(shù)不斷進(jìn)步,需求也在不斷提高,VI的各種變種也不斷涌現(xiàn),知名的有nvi,elvis,VIM,vile,yzis,其中移植性最好、特性最多、使用最廣的當(dāng)屬VIM,VIM主要是Bram Moolenaar開發(fā)的。最初Bram在Amiga計(jì)算機(jī)上改進(jìn)一個(gè)叫Stevie的VI版本,他稱之為“Vi IMitation”。隨著功能的逐漸豐富,VIM的含義也就改成了“Vi IMproved”。相比原始的VI,VIM增加的一項(xiàng)最重要的功能便是多級(jí)撤銷,VI只支持一級(jí)撤銷。

            [separator]


            二、VI/VIM基礎(chǔ)知識(shí)

              很多人應(yīng)該都知道VI是個(gè)有模式的編輯器:編輯模式和命令模式,按ESC回到命令模式,用i或者a進(jìn)入編輯模式,由于區(qū)分了模式,導(dǎo)致VI的命令非常簡(jiǎn)潔,而無模式編輯器比如Emacs,所有的命令都需要加上控制鍵Ctrl或Alt。

                VI繼承了ed的理念,另外也有歷史原因,VI追求的是快捷——啟動(dòng)程序迅速,編輯文本高效,功能專注,而Emacs追求的是功能的豐富強(qiáng)大以及集成帶來的方便。

            在VIM里頭:help mode可以看到VIM的所有模式,主要有如下幾種:
            • Normal mode   即通常所謂的命令模式,在此模式使用a、i、A、I、o、O等進(jìn)入Insert mode
            • Insert mode   即通常所謂的編輯模式,在此模式使用ESC進(jìn)入Normal mode或者Ctrl-o臨時(shí)進(jìn)入Normal mode。
            • Command-line mode 命令行模式,在Normal mode下按冒號(hào)進(jìn)入,按ESC取消執(zhí)行命令或者回車執(zhí)行命令,然后回到Normal mode。(Visual Studio.Net也添加了命令行腳本功能,幸甚)
            • Visual mode   即選擇模式(注意跟用鼠標(biāo)選擇不同),用v,V,C-v或C-q進(jìn)入
            • Select mode   鼠標(biāo)選擇
            • Replace mode   在Normal mode下按R進(jìn)入,按ESC返回Normal mode,相當(dāng)于Windows下命令行中按Insert鍵進(jìn)入的覆蓋模式

              從VI/VIM中退出:按ESC確認(rèn)返回到Normal mode,然后

            • :wq 保存并退出
            • :q! 不保存并退出
            • :x 退出,如果文件更改則保存
            • ZZ 退出,如果文件更改則保存(按住Shift,再按兩次z)

              VI的命令是非常具有美感的,下面是幾個(gè)例子:

            • i 在光標(biāo)前插入 I 在行首插入
            • a 在光標(biāo)后插入 A 在行末插入
            • o 在下一行插入 O 在上一行插入
            • x 刪除當(dāng)前字符 X 刪除前一個(gè)字符

              類似的還有b,B,ge,gE,w,W,e,E,f,F(xiàn),t,T,這些命令都可以用:help cmdname查到幫助。

            • dd 刪除一行 yy 拷貝一行
            • h j k l 左下上右移動(dòng)光標(biāo)
            • Ctrl-w h,Ctrl-w j,Ctrl-w k,Ctrl-w l 切換到左下上右窗口

              類似ed,VI/VIM的命令大多都可以帶一個(gè)數(shù)字前綴或者一個(gè)數(shù)字范圍,比如:

            • 5dd 從當(dāng)前行開始刪除5行
            • 5yy 從當(dāng)前行開始拷貝5行
            • 1,3d 刪除1至3行
            • 1,3y 拷貝1至3行 (.代表當(dāng)前行,$代表最后一行)

              d<motion>,y<motion>,c<motion>,v<motion>分別代表刪除/拷貝/修改/選擇<motion>

              命令指定的范圍,比如
              int main(void)
              {
              ......;
              }

              將光標(biāo)放在{處,然后輸入v%就可以把大括號(hào)中內(nèi)容選定,然后按=就可以按照C語(yǔ)言格式縮排(:help =可以看到=命令的描述),%命令的作用是跳到匹配處,比如括號(hào)之間,C的宏指令#if #else #endif之間。

              int some_ugly_modifier and some_ugly_name (void)
              如果光標(biāo)放在第一個(gè)s上,想刪除到“(”為止,則輸入dt(就可以了,t(的作用是跳到下一個(gè)
              "("前。

              dG可以從當(dāng)前位置一直刪除到文件末尾,因?yàn)镚的作用是跳到文件最后一行。

              VIM的命令可以非常快捷的做到一些復(fù)雜的編輯操作。


              命令解釋如下:

            • %       全文(“%”是“1,$”范圍的縮寫)
            • s       替換
            • /       搜索字符串開始
            • (       左括號(hào)
            • \)      開始記錄匹配
            • \d+     一個(gè)或多個(gè)數(shù)字
            • \)      結(jié)束記錄匹配
            • )       右括號(hào)
            • /       搜索字符串結(jié)束
            • \=      把后面的表達(dá)式計(jì)算出來作為替換字符串
            • "("     左括號(hào)
            • .       字符串連接運(yùn)算符
            • (submatch(1) + 1)       把第一個(gè)匹配的結(jié)果加一作為一個(gè)整體返回
            • .")"    添上右括號(hào)
            • /g      替換字符串結(jié)束,g表示替換每一行的所有匹配結(jié)果。
            • :set ve=all 使得光標(biāo)可以定位到屏幕任何位置(缺省下VIM的光標(biāo)只能放在行內(nèi)的字符上)
            • gg              到文件第一行
            • /\s\+&\s*$      找以&結(jié)尾的行,&前至少一個(gè)空白字符,后0或多個(gè)空白字符
            • qa              記錄宏到寄存器a
            • D               刪除到行尾
            • 78|             定位到第78列
            • i&<ESC>         插入&并返回到命令模式
            • n               查找下一個(gè)&
            • q               停止記錄宏
            • 10000@a         執(zhí)行一萬(wàn)遍寄存器a中保存的命令
            • :set ve=""      恢復(fù)ve缺省值

            三、編程輔助

              既然是程序員的編輯器,自然要show一下它的編程輔助功能。

              (1) ctags,cscope

              現(xiàn)在的IDE都提供了類、函數(shù)的索引功能,可以方便的找到某個(gè)類或者函數(shù)的在哪里定義的,VIM這方面可以利用ctags、cscope做到, Exuberant ctags支持的語(yǔ)言種類非常多,UltraEdit的tags功能也是利用的ctags。cscope只支持C,它能實(shí)現(xiàn)Source Insight的一些功能,比如查找某個(gè)函數(shù)調(diào)用了哪些函數(shù),某個(gè)函數(shù)被哪些函數(shù)調(diào)用。VIM對(duì)這兩個(gè)工具集成的非常好,利用它們就可以在源文件中方便的跳轉(zhuǎn)搜索類和函數(shù)了。

              Reference:

              (2)multi window,multi buffer,multi tab page

              一個(gè)buffer對(duì)應(yīng)一個(gè)文件,它可以對(duì)應(yīng)多個(gè)window,這樣可以方便的對(duì)照編輯一個(gè)文件的不同部分,tab page跟現(xiàn)在許多編輯器上常見的標(biāo)簽頁(yè)意義并不一樣,可以將tab page理解為一個(gè)windows的容器,這樣如果想新建一個(gè)窗口編輯文件但又不想打亂現(xiàn)在的多窗口布局,那么就可以新開一個(gè)tab page,把新窗口放到這個(gè)新的tab page里頭。tab page是VIM 7.0不久前新增的特性,目前VIM 7.0還未正式發(fā)布。(此文發(fā)表至PConline時(shí),已經(jīng)正式發(fā)布。)

            •   Reference:
            •   :help windows
            •   :help buffers
            •   :help tabpage

              (3) 語(yǔ)法高亮

              VIM發(fā)行版里帶了450多種語(yǔ)言的語(yǔ)法高亮,在其主頁(yè)vim.org上還可以找到更多。

            •   Reference:
            •   :help syntax

              (4) 自動(dòng)縮進(jìn)

              在打開自動(dòng)縮進(jìn)選項(xiàng)后,VIM會(huì)自動(dòng)的控制縮進(jìn),比如輸入{自動(dòng)向右縮進(jìn)一個(gè)tab字符(具體用什么縮進(jìn)可以配置),輸入}自動(dòng)回退縮進(jìn)。使用=命令可以對(duì)選擇的程序塊排版縮進(jìn),這對(duì)于整理代碼非常有幫助。另外對(duì)選擇的塊用>>和<<命令可以很方便的控制一個(gè)程序塊的縮進(jìn)。

            •   Reference:
            •   :help cindent
            •   :help autoindent
            •   :help smartindent

              (5) 類和函數(shù)列表

              taglist等插件可以提供很方便的類和函數(shù)列表功能。

              (6) 自動(dòng)完成

              VIM在Insert mode下輸入一個(gè)單詞的前幾個(gè)字符,然后用Ctrl-p或者Ctrl-n就可以列出以這些字符開頭的單詞,特別在配置了ctags后也能列出頭文件中的符號(hào),特別方便,除此外VIM還有行自動(dòng)完成、文件名自動(dòng)完成等,這點(diǎn)即使是現(xiàn)在強(qiáng)大的IDE也未免不足。

              如果設(shè)置了如下選項(xiàng):

            •   :set wildmode=list:full
            •   :set wildmenu

              則在命令行打開文件或者輸入命令時(shí)按Tab(以輸入字符為前綴補(bǔ)全)或者Ctrl-d(列出包含輸入字符的所有匹配項(xiàng)目)自動(dòng)補(bǔ)全,這一功能大大降低了VIM的使用難度。

              另外有許多插件可以實(shí)現(xiàn)許多IDE中的自動(dòng)完成類成員的功能,當(dāng)然,這個(gè)功能還比不上Eclispe、Visual Studio等IDE中的強(qiáng)大,這一點(diǎn)是VIM比較可惜的地方。VIM 7.0引入了Omni Completion,可以自定義匹配完成函數(shù),也許可以彌補(bǔ)這個(gè)缺陷。

            •   Reference: :help 'complete'
            •   :help omni-completion

              (7) folding

              VIM支持折疊代碼,還可以根據(jù)文件中特殊的標(biāo)記對(duì)文件中的行折疊,可以實(shí)現(xiàn)Outline視圖,這可以極大的方便編輯很大的文件。

              Reference: :help fold

              (8) quickfix

              許多人對(duì)于UNIX開發(fā)的印象都是“編輯代碼,退出編輯器,編譯,發(fā)現(xiàn)錯(cuò)誤,記錄出錯(cuò)信息,遍輯代碼,退出編輯器,編譯,用gdb調(diào)試,再編輯代碼……”,這是古老的VI時(shí)代的事情了,有了VIM的quickfix特性,可以在VIM里編譯然后直接跳到編譯出錯(cuò)的行,這個(gè)反復(fù)的過程無需退出編輯器,而且VIM的quickfix特性可以經(jīng)配置后支持不同的編譯器以及不同的語(yǔ)言:只要編譯器在出錯(cuò)信息里包含文件名和行號(hào)。

              不過比較遺憾的是VIM對(duì)于集成調(diào)試支持還不好,有些項(xiàng)目嘗試集成GDB到VIM,比如http://skawina.eu.org/mikolaj/vimgdb/http://www.volny.cz/zellerin/gdbvim/,在http://www.vim.org/search.php中的scripts處搜索gdb也可以找到一些插件.這方面Emacs的GUD(Grand Unified Debugger)調(diào)試界面要更強(qiáng)大,畢竟GCC/GDB/Emacs是一家。

              Reference: :help quickfix

              (9)auto command

              VIM可以在某些事件發(fā)生時(shí)比如打開文件、保存文件、切換窗口時(shí)自動(dòng)執(zhí)行一些VIM命令,VIM的許多插件都利用了這個(gè)功能。常用的一種情況是把某種文件后綴指定到一種文件格式上,比如*.jv指定到Java文件格式,這樣在每次打開.jv類型的文件時(shí)自動(dòng)使用Java的語(yǔ)法高亮:

              :autocmd BufNewFile, BufRead *.jv :set ft=Java

              Reference: :help autocmd.txt

              (10)mode line

              在編輯文件時(shí)常常指定一些選項(xiàng),比如縮進(jìn)量、是否將制表符轉(zhuǎn)換成空格等,每次手動(dòng)指定這些選項(xiàng)很麻煩,寫到vimrc中卻又成了全局選項(xiàng),而且換了一份 VIM,原有的設(shè)置就丟失了。VIM可以識(shí)別文件中的特殊行,自動(dòng)設(shè)置一些選項(xiàng),下面是寫在C源文件開頭的一個(gè)mode line示例:

            • /* vi:set tw=0 ts=8 sw=8 noet nowrap ft=c fdm=syntax: */
            • /*
            • * File: xxxx.c
            • * Author: xxx
            • */

             


            四、強(qiáng)大方便的幫助系統(tǒng)

              使用了那么多軟件,只有VIM和Emacs的幫助系統(tǒng)給筆者方便快捷的感覺,大部分軟件的幫助往往是擺設(shè)而已,而VIM的幫助的確是考慮到了自己“help”的身份,利用它能很方便容易的找到想要的東西。

              VIM的幫助是超鏈接形式的,它使用的就是tags,所以可以跟ctags功能一樣按Ctrl-]跳轉(zhuǎn)到鏈接所指處,按Ctrl-t返回。

            • :help   打開幫助首頁(yè),這個(gè)首頁(yè)分類非常清楚
            • :help cmd 查找normal mode命令,比如:help dd
            • :help i_cmd 查找insert mode命令,比如:help i_Ctrl-y
            • :help :cmd 查找command-line命令,比如:help :s
            • :help 'option 查找選項(xiàng),比如:help 'tabstop
            如果你記不清命令或者選項(xiàng)的全稱,那么可以利用Tab或者Ctrl-d的自動(dòng)補(bǔ)全功能。

              :help options 可以找到所有的選項(xiàng)說明

              查看某一個(gè)選項(xiàng)的值(實(shí)際上選項(xiàng)是VIM中的一種變量,類似SHELL的變量以$符號(hào)引用,VIM的選項(xiàng)以&引用,另外VIM的寄存器以@引用):

              :echo &tabstop

            五、其它高級(jí)功能

              (1)寄存器

              VIM里面的寄存器可以用來保存拷貝的文本、記錄的宏、設(shè)置的書簽等等,一般的編輯器都只有一個(gè)剪切板(MS Office加入了多個(gè)剪切板),而VIM和Emacs編輯器中的多寄存器可以實(shí)現(xiàn)多個(gè)剪切板的功能。VIM中有九類寄存器:

            • 無名寄存器 " 最近一次刪除/修改/替換操作的文本都會(huì)放入這個(gè)寄存器
            • 10個(gè)數(shù)字寄存器 0-9 拷貝或者刪除的文本存入這些寄存器,這些寄存器是循環(huán)使用的,在每次存入內(nèi)容到寄存器1時(shí),原有的內(nèi)容會(huì)依次存入到后一個(gè)寄存器中。
            • 小刪除寄存器 - 刪除內(nèi)容少于一行時(shí)放入這個(gè)寄存器。
            • 26個(gè)命名寄存器 a-zA-Z 大小寫無關(guān)。這些寄存器可以在拷貝或者刪除等操作中指定使用。
            • 四個(gè)只讀寄存器 :.%# 特殊用途。
            • 表達(dá)式寄存器 = 特殊用途。
            • 選擇和拖放寄存器 *+~ 用于與系統(tǒng)剪切板交互,以及接收拖放操作的內(nèi)容。
            • 黑洞寄存器 _ 放到這里面的內(nèi)容都被丟棄,這樣可以刪除或拷貝時(shí)不影響其它寄存器。
            • 最后一次搜索模式寄存器 / 保存最后一次搜索的正則表達(dá)式。

              使用:reg命令可以看到所有寄存器中的內(nèi)容,使用"+y或者"*y可以將visual mode下選擇
              的內(nèi)容拷貝到系統(tǒng)剪切板,使用"+p或者"*p可以將剪切板中的內(nèi)容粘貼到VIM中,如果打開了
              mswin特性的話則在insert mode下使用Ctrl-x,Ctrl-v,Ctrl-c了。

              Reference: :help registers

              (2) 宏
              Normal mode下按q<reg>,<reg>指{a-zA-Z0-9"}37個(gè)寄存器中的一個(gè),然后可以進(jìn)行任何操作,包括在模式間切換,最后在Normal模式下按q可以結(jié)束宏錄制,用@<reg>命令可以應(yīng)用這個(gè)宏,命令前可以帶數(shù)字前綴表示執(zhí)行多少次這個(gè)宏。

              Reference: :help q

              (3) 書簽

              Normal mode下按m<reg>作書簽,<reg>指26個(gè)命名寄存器中的一個(gè),然后可以用'<reg>或者`<reg>跳到書簽處。

              Reference: :help m

              (4) 映射

              VI/VIM可以將某個(gè)按鍵序列映射到一個(gè)命令序列上,比如在配置文件.vimrc(Windows下是_vimrc)中寫入

            map <F6> <ESC>i<C-R>=strftime("%Y-%m-%d")<ESC><ESC>

              即可以在Normal mode下插入當(dāng)前日期。

              Reference: :help :map

              (5) 縮寫

              VI/VIM支持用一個(gè)縮寫字符串代替一個(gè)長(zhǎng)的字符串,比如

              :ab hw hello world

              然后在Insert mode下輸入“hw ”(不包括引號(hào))后VIM就自動(dòng)替換成了“hello world”。這里展示一個(gè)Emacs下abbrev功能的動(dòng)畫(沒錯(cuò),是Emacs的):

              http://www.bloomington.in.us/~brutt/msf-abbrev.html
              http://www.bloomington.in.us/~brutt/msf-abbrev-demo.gif

              Reference: :help :ab

              (6) :s//和:g//,:!g//

              這兩個(gè)命名加上正則表達(dá)式,常常能完成非常復(fù)雜的編輯任務(wù),可以毫不夸張地說是VIM的兩柄瑞士軍刀。:s是替換操作,:g是查找匹配模式的行,:!g是查找不匹配模式的行。

              http://www.vim.org/tips/tip.php?tip_id=1063這個(gè)tip可以把:g找到的行拷貝到一個(gè)新的緩沖區(qū)中,非常有用。

            •   Reference: :help :s
            •   :help :g

              (7) 插件

              VIM自己有腳本語(yǔ)言,另外也支持用Perl/Python/Tcl/Ruby/Scheme編寫插件,這些插件極大的豐富了VIM的功能。

              (8) color scheme

              VIM有許多配色方案,下面這個(gè)鏈接有許多配色方案效果的圖樣:http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/

              (9) 二進(jìn)制編輯

              VIM可以利用xxd實(shí)現(xiàn)二進(jìn)制編輯,不過這項(xiàng)功能還是不夠好用。

              (10) sign

              sign指在編輯窗口的最左列顯示一個(gè)標(biāo)記,利用這個(gè)功能能實(shí)現(xiàn)很多IDE中的書簽標(biāo)記或者斷點(diǎn)標(biāo)記。

              Reference: :help sign

            六、VIM Scripts

              VIM script包含幾大類:

            •   color scheme 配色方案
            •   ftplugin File type插件,特定語(yǔ)言語(yǔ)法的設(shè)置,比如如何識(shí)別注釋
            •   syntax   語(yǔ)法高亮的配色
            •   plugin   提供額外功能的插件,比如智能完成、緩沖區(qū)管理。

              VIM的script安裝非常簡(jiǎn)單,下載的script文件或者壓縮包里頭都有安裝說明,在VIM的安裝目錄(比如C:\VIM64)下面有一個(gè) vimfiles目錄,把script放到vimfiles目錄下即可。對(duì)于多用戶系統(tǒng),可以在HOME目錄(一般是c:\Documents and Settings<USER_NAME>\)下面建立一個(gè)vimfiles目錄,把script放置到這里。

              下面是一些好用的VIM插件,具體使用辦法請(qǐng)參考各自。vim文件頭部的注釋。

              BufExplorer.vim   *****
              http://www.vim.org/scripts/script.php?script_id=42
              這個(gè)插件可以使編輯多文件更加方便,裝完插件后Normal mode下輸入\be即可打開緩沖區(qū)列表,光標(biāo)放置在某一個(gè)文件上按回車即可打開這個(gè)文件,而緩沖區(qū)列表自動(dòng)關(guān)閉。

              Taglist.vim   *****
              http://www.vim.org/scripts/script.php?script_id=273
              這個(gè)插件可以實(shí)現(xiàn)類或者函數(shù)列表功能,支持C/C++,java,perl,python,tcl,sql,php等語(yǔ)言,它可以在VIM中創(chuàng)建一個(gè)窗口,列出編輯的源文件中的類、函數(shù)、變量定義列表,而且更方便的是這個(gè)列表也插入在了右鍵菜單中,分類存放,訪問非常方便。

              TabBar.vim   ***
              http://www.vim.org/scripts/script.php?script_id=1338
              這個(gè)插件實(shí)現(xiàn)了類似UltraEdit中的標(biāo)簽頁(yè)的功能,而且能通過Alt-<n>來切換,<n>代表1-9。

              minibufexpl.vim   ***
              http://www.vim.org/scripts/script.php?script_id=159
              實(shí)現(xiàn)了類似UltraEdit中的標(biāo)簽也功能。

              c.vim    ***
              http://www.vim.org/scripts/script.php?script_id=213
              提供了很多便于C/C++編程的功能,比如文件頭模版,代碼片斷等。

              CRefVim    **
              http://www.vim.org/scripts/script.php?script_id=614
              為VIM定制的C參考手冊(cè),這樣對(duì)于語(yǔ)法或者函數(shù)不清楚的地方可以方便的查找了。

              latex-suite   *****
              http://www.vim.org/scripts/script.php?script_id=475
              http://vim-latex.sf.net/
              提供了很多便于編輯TeX/LaTeX文件的功能,比如在VIM里面編譯或者預(yù)覽、自動(dòng)插入TeX標(biāo)記等。

              word_complete.vim ***
              http://www.vim.org/scripts/script.php?script_id=73
              Insert模式下在輸入的時(shí)候自動(dòng)補(bǔ)全單詞,如果補(bǔ)全正確可以按Tab鍵接受,否則可以不管它繼續(xù)輸入或者按Ctrl-n,Ctrl-p切換補(bǔ)全。注意是輸入三個(gè)字符后才開始補(bǔ)全。

              Vim JDE
              http://www.vim.org/scripts/script.php?script_id=1213
              支持C/C++等的自動(dòng)完成(需要VIM 7.0,編譯時(shí)打開+ruby特性).

              cppcomplete.vim   **
              http://www.vim.org/scripts/script.php?script_id=527
              能自動(dòng)完成C/C++/Java的結(jié)構(gòu)或類成員,注意它的快捷鍵是Alt-l(字母L)不是Alt-i。

              The NEAD Commenter **
              http://www.vim.org/scripts/script.php?script_id=1218
              在許多類型的文件中方便的加上注釋或者取消注釋。

              winmanager
              http://www.vim.org/scripts/script.php?script_id=95
              把標(biāo)準(zhǔn)的File Explorer以及Buffer Explorer插件集成在一起,提供現(xiàn)代編輯器中常見的文件列表和緩沖區(qū)列表功能。

              sketch.vim ***
              http://www.vim.org/scripts/script.php?script_id=705
              Draw with mouse: boxes, arrows, lines, fills. Transparent/opaque drag and drop.照著它的教程做一遍,你就會(huì)震撼于它的創(chuàng)意了。

              DrawIt.vim **
              http://www.vim.org/scripts/script.php?script_id=40
              可以方便的畫連線圖。

              MultipleSearch   ***
              http://www.vim.org/scripts/script.php?script_id=479
              MultipleSearch2.vim ***
              http://www.vim.org/scripts/script.php?script_id=1183
              Mark.vim   ***
              http://www.vim.org/scripts/script.php?script_id=1238
              otf.vim    **
              http://www.vim.org/scripts/script.php?script_id=634
              這些插件可以同時(shí)高亮顯示多次搜索結(jié)果,這個(gè)特性非常有利于顯示代碼中某些變量或函數(shù)的調(diào)用位置。

              SearchComplete.vim *
              http://www.vim.org/scripts/script.php?script_id=474
              可以用/搜索時(shí)按Tab補(bǔ)全要搜索的單詞。

              Vim Intellisense
              http://insenvim.sourceforge.net
              顧名思義,此插件用于給VIM提供智能完成功能,支持C++,C#,Java,JSP,HTML,SQL,XML,筆者安裝后一直懶得配置,也就沒用上。

              project
              http://www.vim.org/scripts/script.php?script_id=69
              提供一些IDE功能,看介紹似乎很不錯(cuò)。

              JavaBrower
              http://www.vim.org/scripts/script.php?script_id=588
              提供文件中Java類的樹狀列表。

              vimspell
              http://www.vim.org/scripts/script.php?script_id=465
              ispell or aspell based spell checker with fly-spelling。

              cream
              http://cream.sourceforge.net/
              一套配置文件,可以把VIM的界面改成CUA(Common User Access)模型,降低VIM的學(xué)習(xí)難度,個(gè)人不推薦這種做法,不過其中有些高級(jí)配置值得學(xué)習(xí)(有意思的是Emacs也有類似的項(xiàng)目: Easymacs,EmacsW32)。

              IComplete
              http://icomplete.sf.net
              搭配VIM 7.0的Omni Complete,可以做到C/C++的智能完成功能.

            七、VIM資源

              幾個(gè)學(xué)習(xí)正則表達(dá)式的工具(from happyvim at newsmth)

              http://www.yzis.org/   yzis是一個(gè)新的VI變種,它支持變寬字體,目前功能還不夠豐富。

              http://ex-vi.sourceforge.net/ 傳統(tǒng)VI的源代碼

            八、編譯安裝最新CVS版的VIM

              1. 獲取源代碼

              cvs -z3 -d:pserver:anonymous@cvs.sf.net:/cvsroot/vim co vim7

              源代碼位于當(dāng)前目錄的vim7目錄下面,假設(shè)安裝目標(biāo)在d:\work\program\Vim\vim70b

              2.編譯

              注意重新編譯前最好clean一下,確保“*obj*”目錄被刪除了,否則可能出現(xiàn)莫名其妙的問題,比如鏈接時(shí)找不到一些函數(shù)。下面是一個(gè)批處理腳本:

              rem --------------------------------------------->
              @echo off
              set path=c:\winnt;c:\winnt\system32
              vcvars32.bat
              cd vim7\src
              rem .sh文件跟其它程序有關(guān)聯(lián),避免運(yùn)行VC的link時(shí)執(zhí)行了link.sh
              ren link.sh link.sh.old
              @echo clean...
              rem clean時(shí)加入這些選項(xiàng)是因?yàn)?(OUTDIR)和$(OBJDIR)根據(jù)這些標(biāo)志合成的,
              rem 如果不加這些標(biāo)志, 在rmdir /s /q時(shí)會(huì)找不到目錄, 從而沒有刪除掉。
              nmake -f Make_mvc.mak clean FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:\work\program\Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:\work\program\Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
              @echo build big debug version...
              nmake -f Make_mvc.mak all FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:\work\program\Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:\work\program\Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
              ren link.sh.old link.sh
              @echo done.
              pause
              @echo on
              rem <-----------------------------------------------

              對(duì)于MinGW,

              @echo off
              @echo clean...
              make -f Make_ming.mak clean DEBUG=yes
              @echo make...
              make -f Make_ming.mak all GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:/work/program/Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:/work/program/Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
              @echo done.
              pause
              @echo on

              如果發(fā)現(xiàn)MinGW編譯出來的gvimd.exe非常大(約4~5MB),可以用MinGW自帶的strip處理一下。

              3. 安裝

              如果你的系統(tǒng)先前有一份不同版本的VIM,那么需要先卸載掉(運(yùn)行vim\vimXX\uninstal.exe,或者在拷貝完文件后運(yùn)行新版VIM的 install.exe,它也會(huì)提示卸載舊版本),最近的VIM 7 CVS代碼安裝目錄也從vim70aa轉(zhuǎn)變到vim70b,也需要卸載原先的vim70aa,這一步主要是刪除一些注冊(cè)表項(xiàng)。

              如果你從CVS上更新代碼后,install要求的安裝目錄名字沒有改變(也就是說VIM版本沒變),那么不需要卸載原先的版本,直接拷貝文件覆蓋即可,如果你想更改目錄安裝的話也需要卸載。

              cd vim7
              dir /s/b *.exe
              dir /s/b *.dll
              xcopy vim7\runtime d:\work\program\vim\vim70b (vim70b是一個(gè)目錄)
              copy vim7\src\*.exe d:\work\program\Vim\vim70b
              copy vim7\src\xxd\xxd.exe d:\work\program\Vim\vim70b
              copy vim7\src\vimtbar.dll d:\work\program\Vim\vim70b
              copy vim7\src\GvimExt\gvimext.dll d:\work\program\Vim\vim70b
              copy vim7\src\VisVim\Visvim.dll d:\work\program\Vim\vim70b

              然后進(jìn)入vim70b目錄運(yùn)行install.exe,如果發(fā)現(xiàn)一個(gè)DOS窗口一閃而逝,那么很可能是建立的vim70b目錄名不對(duì),比如筆者前幾天升級(jí)后使用的仍然是vim70aa目錄名,在DOS窗口中運(yùn)行install.exe它就提示需要在vim70b目錄下運(yùn)行,將vim70aa改名即可。 install.exe的源代碼是vim7\src\dosinst.c,這里面修改了注冊(cè)表,并拷貝一些文件到WINDOWS目錄下等等。

              4.善后

              視情況你需要更新PATH環(huán)境變量、文件關(guān)聯(lián)、_vimrc中的路徑名等,并將diff.exe,ctags.exe,cscope.exe拷貝到vim70b下面。

              最后運(yùn)行g(shù)vimd.exe,鍵入:ver開始享受VIM吧。

            九、一份vimrc配置文件(注:原文如此,不太清楚作者所要表達(dá)的信息)

            十、VIM的不足

              前面已經(jīng)提到,VIM在自動(dòng)完成和集成調(diào)試方面還比不上現(xiàn)代的許多IDE,另外VIM對(duì)二進(jìn)制編輯還沒有UltraEdit強(qiáng)大,對(duì)于現(xiàn)在流行的重構(gòu), VIM也支持不力,但是作為一個(gè)文本編輯器而言,堪比的只有Emacs,另外Visual SlickEdit也很強(qiáng)大,不過它是商業(yè)軟件。VIM也可以嵌入到Visual Studio中作為編輯器,另外Code Forge,Eclipse,NetBeans,Sun Visual Workshop等也提供了一定的VIM支持或者鍵綁定。

            •   Reference:
            •   :help workshop
            •   :help netbeans
            •   :help debugger

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            午夜欧美精品久久久久久久| 婷婷久久香蕉五月综合加勒比| 国产精品视频久久| 91久久精品电影| 久久久无码精品亚洲日韩京东传媒| 久久婷婷午色综合夜啪| 无码精品久久久天天影视| 久久精品一区二区| 久久亚洲国产最新网站| 91精品婷婷国产综合久久| 99久久综合国产精品免费| 大伊人青草狠狠久久| 亚洲午夜福利精品久久| 久久国产乱子精品免费女| 久久综合伊人77777| 久久青青草原国产精品免费| 免费精品久久天干天干| 99久久www免费人成精品| 久久综合噜噜激激的五月天| 欧美久久综合九色综合| 99re这里只有精品热久久| 亚洲精品国精品久久99热一| 久久九九久精品国产| 伊人久久大香线蕉影院95| 日产精品久久久一区二区| 香蕉久久久久久狠狠色| 久久久久国产日韩精品网站| 欧美激情精品久久久久| 久久精品国产网红主播| 一本久道久久综合狠狠爱| 亚洲国产成人乱码精品女人久久久不卡| 久久国产精品99精品国产987| 老色鬼久久亚洲AV综合| 久久久久久久亚洲Av无码| 亚洲狠狠婷婷综合久久蜜芽| 77777亚洲午夜久久多喷| 久久无码AV中文出轨人妻| 狠狠色综合网站久久久久久久高清| 久久伊人色| 国内精品人妻无码久久久影院导航| 国内精品伊人久久久久妇|