程序員的編輯器——VIM

一、VIM的歷史

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

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

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

[separator]

二、VI/VIM基礎知識

很多人應該都知道VI是個有模式的編輯器:編輯模式和命令模式,按ESC回到命令模式,用i或者a進入編輯模式,由於區分了模式,導致VI的命令非常簡潔,而無模式編輯器比如Emacs,所有的命令都需要加上控制鍵Ctrl或Alt。
    VI繼承了ed的理念,另外也有歷史原因,VI追求的是快捷——啓動程序迅速,編輯文本高效,功能專注,而Emacs追求的是功能的豐富強大以及集成帶來的方便。
在VIM裏頭:help mode可以看到VIM的所有模式,主要有如下幾種:

  • Normal mode  即通常所謂的命令模式,在此模式使用a、i、A、I、o、O等進入Insert mode
  • Insert mode  即通常所謂的編輯模式,在此模式使用ESC進入Normal mode或者Ctrl-o臨時進入Normal mode。
  • Command-line mode 命令行模式,在Normal mode下按冒號進入,按ESC取消執行命令或者回車執行命令,然後回到Normal mode。(Visual Studio.Net也添加了命令行腳本功能,幸甚)
  • Visual mode  即選擇模式(注意跟用鼠標選擇不同),用v,V,C-v或C-q進入
  • Select mode  鼠標選擇
  • Replace mode  在Normal mode下按R進入,按ESC返回Normal mode,相當於Windows下命令行中按Insert鍵進入的覆蓋模式

從VI/VIM中退出:按ESC確認返回到Normal mode,然後

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

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

  • i 在光標前插入 I 在行首插入
  • a 在光標後插入 A 在行末插入
  • o 在下一行插入 O 在上一行插入
  • x 刪除當前字符 X 刪除前一個字符

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

  • dd 刪除一行 yy 拷貝一行
  • h j k l 左下上右移動光標
  • Ctrl-w h,Ctrl-w j,Ctrl-w k,Ctrl-w l 切換到左下上右窗口

類似ed,VI/VIM的命令大多都可以帶一個數字前綴或者一個數字範圍,比如:

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

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

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

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

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

dG可以從當前位置一直刪除到文件末尾,因爲G的作用是跳到文件最後一行。

VIM的命令可以非常快捷的做到一些複雜的編輯操作。

命令解釋如下:

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

三、編程輔助

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

(1) ctags,cscope

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

Reference:

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

一個buffer對應一個文件,它可以對應多個window,這樣可以方便的對照編輯一個文件的不同部分,tab page跟現在許多編輯器上常見的標籤頁意義並不一樣,可以將tab page理解爲一個windows的容器,這樣如果想新建一個窗口編輯文件但又不想打亂現在的多窗口布局,那麼就可以新開一個tab page,把新窗口放到這個新的tab page裏頭。tab page是VIM 7.0不久前新增的特性,目前VIM 7.0還未正式發佈。(此文發表至PConline時,已經正式發佈。)

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

(3) 語法高亮

VIM發行版裏帶了450多種語言的語法高亮,在其主頁vim.org上還可以找到更多。

  • Reference:
  • :help syntax

(4) 自動縮進

在打開自動縮進選項後,VIM會自動的控制縮進,比如輸入{自動向右縮進一個tab字符(具體用什麼縮進可以配置),輸入}自動回退縮進。使用 =命令可以對選擇的程序塊排版縮進,這對於整理代碼非常有幫助。另外對選擇的塊用&gt;&gt;和<&lt;命令可以很方便的控制一個程序塊的縮進。

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

(5) 類和函數列表

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

(6) 自動完成

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

如果設置瞭如下選項:

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

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

另外有許多插件可以實現許多IDE中的自動完成類成員的功能,當然,這個功能還比不上Eclispe、Visual Studio等IDE中的強大,這一點是VIM比較可惜的地方。VIM 7.0引入了Omni Completion,可以自定義匹配完成函數,也許可以彌補這個缺陷。

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

(7) folding

VIM支持摺疊代碼,還可以根據文件中特殊的標記對文件中的行摺疊,可以實現Outline視圖,這可以極大的方便編輯很大的文件。

Reference: :help fold

(8) quickfix

許多人對於UNIX開發的印象都是“編輯代碼,退出編輯器,編譯,發現錯誤,記錄出錯信息,遍輯代碼,退出編輯器,編譯,用gdb調試,再編輯代碼……”,這是古老的VI時代的事情了,有了VIM的quickfix特性,可以在VIM裏編譯然後直接跳到編譯出錯的行,這個反覆的過程無需退出編輯器,而且VIM的quickfix特性可以經配置後支持不同的編譯器以及不同的語言:只要編譯器在出錯信息裏包含文件名和行號。

不過比較遺憾的是VIM對於集成調試支持還不好,有些項目嘗試集成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)調試界面要更強大,畢竟GCC/GDB/Emacs是一家。

Reference: :help quickfix

(9)auto command

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

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

Reference: :help autocmd.txt

(10)mode line

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

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

四、強大方便的幫助系統

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

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

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

:help options 可以找到所有的選項說明

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

:echo &tabstop

五、其它高級功能

(1)寄存器

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

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

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

Reference: :help registers

(2) 宏
Normal mode下按q&lt;reg>,<reg>指{a-zA-Z0-9"}37個寄存器中的一個,然後可以進行任何操作,包括在模式間切換,最後在Normal模式下按q可以結束宏錄製,用@<reg>命令可以應用這個宏,命令前可以帶數字前綴表示執行多少次這個宏。

Reference: :help q

(3) 書籤

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

Reference: :help m

(4) 映射

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

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

即可以在Normal mode下插入當前日期。

Reference: :help :map

(5) 縮寫

VI/VIM支持用一個縮寫字符串代替一個長的字符串,比如

:ab hw hello world

然後在Insert mode下輸入“hw ”(不包括引號)後VIM就自動替換成了“hello world”。這裏展示一個Emacs下abbrev功能的動畫(沒錯,是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//

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

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

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

(7) 插件

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

(8) color scheme

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

(9) 二進制編輯

VIM可以利用xxd實現二進制編輯,不過這項功能還是不夠好用。

(10) sign

sign指在編輯窗口的最左列顯示一個標記,利用這個功能能實現很多IDE中的書籤標記或者斷點標記。

Reference: :help sign

六、VIM Scripts

VIM script包含幾大類:

  • color scheme 配色方案
  • ftplugin File type插件,特定語言語法的設置,比如如何識別註釋
  • syntax  語法高亮的配色
  • plugin  提供額外功能的插件,比如智能完成、緩衝區管理。

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

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

BufExplorer.vim  *****
http://www.vim.org/scripts/script.php?script_id=42
這個插件可以使編輯多文件更加方便,裝完插件後Normal mode下輸入\be即可打開緩衝區列表,光標放置在某一個文件上按回車即可打開這個文件,而緩衝區列表自動關閉。

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

TabBar.vim  ***
http://www.vim.org/scripts/script.php?script_id=1338
這個插件實現了類似UltraEdit中的標籤頁的功能,而且能通過Alt-<n>來切換,<n>代表1-9。

minibufexpl.vim  ***
http://www.vim.org/scripts/script.php?script_id=159
實現了類似UltraEdit中的標籤也功能。

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參考手冊,這樣對於語法或者函數不清楚的地方可以方便的查找了。

latex-suite  *****
http://www.vim.org/scripts/script.php?script_id=475
http://vim-latex.sf.net/
提供了很多便於編輯TeX/LaTeX文件的功能,比如在VIM裏面編譯或者預覽、自動插入TeX標記等。

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

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

cppcomplete.vim  **
http://www.vim.org/scripts/script.php?script_id=527
能自動完成C/C++/Java的結構或類成員,注意它的快捷鍵是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
把標準的File Explorer以及Buffer Explorer插件集成在一起,提供現代編輯器中常見的文件列表和緩衝區列表功能。

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

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
這些插件可以同時高亮顯示多次搜索結果,這個特性非常有利於顯示代碼中某些變量或函數的調用位置。

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

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功能,看介紹似乎很不錯。

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的學習難度,個人不推薦這種做法,不過其中有些高級配置值得學習(有意思的是Emacs也有類似的項目: Easymacs,EmacsW32)。

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

七、VIM資源

幾個學習正則表達式的工具(from happyvim at newsmth)

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

http://ex-vi.sourceforge.net/ 傳統VI的源代碼

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

1. 獲取源代碼

cvs -z3 -d:pserver:[email protected]:/cvsroot/vim co vim7

源代碼位於當前目錄的vim7目錄下面,假設安裝目標在d:\work\program\Vim\vim70b

2.編譯

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

rem ---------------------------------------------&gt;
@echo off
set path=c:\winnt;c:\winnt\system32
vcvars32.bat
cd vim7\src
rem .sh文件跟其它程序有關聯,避免運行VC的link時執行了link.sh
ren link.sh link.sh.old
@echo clean...
rem clean時加入這些選項是因爲$(OUTDIR)和$(OBJDIR)根據這些標誌合成的,
rem 如果不加這些標誌, 在rmdir /s /q時會找不到目錄, 從而沒有刪除掉。
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 &lt;-----------------------------------------------

對於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

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

3. 安裝

如果你的系統先前有一份不同版本的VIM,那麼需要先卸載掉(運行vim\vimXX\uninstal.exe,或者在拷貝完文件後運行新版 VIM的 install.exe,它也會提示卸載舊版本),最近的VIM 7 CVS代碼安裝目錄也從vim70aa轉變到vim70b,也需要卸載原先的vim70aa,這一步主要是刪除一些註冊表項。

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

cd vim7
dir /s/b *.exe
dir /s/b *.dll
xcopy vim7\runtime d:\work\program\vim\vim70b (vim70b是一個目錄)
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

然後進入vim70b目錄運行install.exe,如果發現一個DOS窗口一閃而逝,那麼很可能是建立的vim70b目錄名不對,比如筆者前幾天升級後使用的仍然是vim70aa目錄名,在DOS窗口中運行install.exe它就提示需要在vim70b目錄下運行,將vim70aa改名即可。 install.exe的源代碼是vim7\src\dosinst.c,這裏面修改了註冊表,並拷貝一些文件到WINDOWS目錄下等等。

4.善後

視情況你需要更新PATH環境變量、文件關聯、_vimrc中的路徑名等,並將diff.exe,ctags.exe,cscope.exe拷貝到vim70b下面。

最後運行gvimd.exe,鍵入:ver開始享受VIM吧。

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

十、VIM的不足

前面已經提到,VIM在自動完成和集成調試方面還比不上現代的許多IDE,另外VIM對二進制編輯還沒有UltraEdit強大,對於現在流行的重構, VIM也支持不力,但是作爲一個文本編輯器而言,堪比的只有Emacs,另外Visual SlickEdit也很強大,不過它是商業軟件。VIM也可以嵌入到Visual Studio中作爲編輯器,另外Code Forge,Eclipse,NetBeans,Sun Visual Workshop等也提供了一定的VIM支持或者鍵綁定。

  • Reference:
  • :help workshop
  • :help netbeans
  • :help debugger
十一、工作中使用VI的問題
  • :w保存後,:q退出時,提示“E138: 不能寫入 .viminfo 文件”。
  • u爲撤銷命令,與u對應的恢復命令爲ctrl+r

解決辦法:將.viminfo.tmp臨時文件刪除掉即可。

原文地址 http://blog.chinaunix.net/u2/62093/showart_485460.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章