Vim

Vim是從vi發展出來的一個文本編輯器。其代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富，在程序員中被廣泛使用。和Emacs並列成為類Unix系統用戶最喜歡的編輯器。
Vim的第一個版本由布拉姆·莫勒納爾在1991年發佈。最初的簡稱是Vi IMitation，隨著功能的不斷增加，正式名稱改成了Vi IMproved。現在是在開放源代碼方式下發行的自由軟件。

**Vim歷史**
布拉姆·莫勒納爾1988年購入他的Amiga計算機，以在雅達利ST運作的Stevie (text editor)為基礎，將它移植到Amiga電腦上，於1988年發布了Vim的1.0版本。最初的目標只是完全複製vi的功能，那個時候的Vim是Vi IMitation（Vi 模仿品）的簡稱。1991年Vim 1.14版被"Fred Fish Disk #591"這個Amiga用的免費軟件集所收錄了。1992年1.22版本的Vim被移植到了UNIX和MS-DOS上。從那個時候開始，Vim的全名就變成Vi IMproved（改良）了。
在這之後，Vim加入了不計其數的新功能。做為第一個里程碑的是1994年的3.0版本加入了多窗口編輯（分割視窗）模式，可以在同一終端中同時編輯多個文件。1996年發佈的Vim 4.0是第一個利用GUI（圖形用戶界面）的版本。1998年5.0版本的Vim加入了highlight（語法高亮）功能。2001年的Vim 6.0版本加入了代碼摺疊、插件、多國語言支持、垂直分割視窗等功能。2006  年5月發佈的Vim 7.0版更加入了拼字檢查、上下文相關補全，標籤頁編輯等新功能。2008年8月發佈的Vim 7.2，合併了Vim 7.1以來的所有修正補丁，並且為 vim 腳本增加了浮點數支持。

**協議**
目前，VIM是按照VIM許可證發佈的開源軟件，這個協議兼容GPL。它的協議中包含一些慈善條款，建議用戶向荷蘭ICCF捐款，用於幫助烏干達的艾滋病患者。VIM啟動時會顯示-{「}-Help poor children in Uganda!-{」}-的字樣，在中文版本中則是-{「}-請幫助烏幹達的可憐孩童!-{」}-。
在指令列輸入  :help uganda 可以看到詳細的捐款方式。

**學習曲線**
對於大多數用戶來說，Vim有著一個比較陡峭的學習曲線。這意味著開始學習的時候可能會進展緩慢，但是一旦掌握一些基本操作之後，能大幅度提高編輯效率。為了幫助學習，Vim為初學者準備了Vim教學。通常可以在Unix系統命令行下輸入"vimtutor"或者點擊Windows系統桌面上的Vim教學圖標進入。在Vim用戶手冊中更加詳細的描述了Vim的基礎和進階功能。可以在Vim中輸入":help user-manual"進入用戶手冊。手冊除了原始的英文版本之外，也被志願者翻譯成了各國文字，其中包括中文。
新用戶也應該學習Vim的幫助系統。可以在Vim中輸入不帶參數的"help"來閱讀主幫助文件。

**模式**
vim 剛進入的歡迎畫面。
從vi衍生出來的Vim具有多種模式，這種獨特的設計容易使初學者產生混淆。幾乎所有的編輯器都會有插入和執行命令兩種模式，並且大多數的編輯器使用了與Vim截然不同的方式：命令目錄（鼠標或者鍵盤驅動），組合鍵（通常通過control鍵（CTRL）和alt鍵（ALT）組成）或者鼠標輸入。Vim和vi一樣，僅僅通過鍵盤來在這些模式之中切換。這就使得Vim可以不用進行菜單或者鼠標操作，並且最小化組合鍵的操作。對文字錄入員或者程序員可以大大增強速度和效率。
Vim具有6種基本模式和5種派生模式。

**基本模式**

**普通模式**
在普通模式中，用的編輯器命令，比如移動光標，刪除文本等等。這也是Vim啟動後的默認模式。這正好和許多新用戶期待的操作方式相反（大多數編輯器默認模式為插入模式）。
Vim強大的編輯能力來自於其普通模式命令。普通模式命令往往需要一個操作符結尾。例如普通模式命令"dd"刪除當前行，但是第一個"d"的後面可以跟另外的移動命令來代替第二個"d"，比如用移動到下一行的"j"鍵就可以刪除當前行和下一行。另外還可以指定命令重複次數，"2dd"（重複"dd"兩次），和"dj"的效果是一樣的。用戶學習了各種各樣的文本間移動／跳轉的命令和其他的普通模式的編輯命令，並且能夠靈活組合使用的話，能夠比那些沒有模式的編輯器更加高效的進行文本編輯。
在普通模式中，有很多方法可以進入插入模式。比較普通的方式是按"a"（append／追加）鍵或者"i"（insert／插入）鍵。

**插入模式**
在這個模式中，大多數按鍵都會向文本緩衝區中插入文本。大多數新用戶希望文本編輯器編輯過程中一直保持這個模式。
在插入模式中，可以按ESC鍵回到普通模式。

**可視模式**
這個模式與普通模式比較相似。但是移動命令會擴大高亮的文本區域。高亮區域可以是字符、行或者是一塊文本。當執行一個非移動命令時，命令會被執行到這塊高亮的區域上。Vim的"文本對象"也能和移動命令一樣用在這個模式中。

**選擇模式**
這個模式和無模式編輯器的行為比較相似（Windows標準文本控件的方式）。這個模式中，可以用鼠標或者光標鍵高亮選擇文本，不過輸入任何字符的話，Vim會用這個字符替換選擇的高亮文本塊，並且自動進入插入模式。

**命令行模式**
在命令行模式中可以輸入會被解釋成並執行的文本。例如執行命令（":"鍵），搜索（"/"和"?"鍵）或者過濾命令（"!"鍵）。在命令執行之後，Vim返回到命令行模式之前的模式，通常是普通模式。

**Ex模式**
這和命令行模式比較相似，在使用":visual"命令離開Ex模式前，可以一次執行多條命令。

**衍生模式**

**操作符等待模式**
這個派生模式指普通模式中，執行一個操作命令後Vim等待一個"動作"來完成這個命令。Vim也支持在操作符等待模式中使用"文本對象"作為動作，包括"aw"一個單詞（a word）、"as"一個句子（a sentence）、"ap"一個段落（a paragraph）等等。
比如，在普通模式下"d2as"刪除當前和下一個句子。在可視模式下"apU"把當前段落所有字母大寫。

**插入普通模式**
這個模式是在插入模式下按下ctrl-o鍵的時候進入。這個時候暫時進入普通模式，執行完一個命令之後，Vim返回插入模式

**插入可視模式**
這個模式是在插入模式下按下ctrl-o鍵並且開始一個可視選擇的時候開始。在可視區域選擇取消的時候，Vim返回插入模式。

**插入選擇模式**
通常這個模式由插入模式下鼠標拖拽或者shift方向鍵來進入。當選擇區域取消的時候，Vim返回插入模式。

**替換模式**
這是一個特殊的插入模式，在這個模式中可以做和插入模式一樣的操作，但是每個輸入的字符都會覆蓋文本緩衝中已經存在的字符。在普通模式下按"R"鍵進入。

**其他**

**Evim (Easy Vim)**
Evim（Easy Vim）是一個特殊的GUI模式用來儘量的表現的和"無模式"編輯器一樣。編輯器自動進入並且停留在插入模式，用戶-{只}-能通過菜單、鼠標和鍵盤控制鍵來對文本進行操作。可以在命令行下輸入"evim"或者"vim -y"進入。在Windows下，通常也可以點擊桌面上Evim（Easy Vim）的圖標。

**功能**

**概要**
 根據設定可以和原始vi幾乎兼容（例外包括Vim不支持Vi的打開模式僅支持可視模式）- 多緩衝編輯- 任意個數的分割窗口（橫，豎）- 具備列表和字典功能的腳本語言- 可以在腳本中調用Lua，Perl，Ruby，Python，Tcl，MzScheme- 單詞縮寫功能- 動態單詞補全- 多次撤銷和重做- 對應400種以上文本-{zh-hans:文件; zh-hant:檔案;}-的語法高亮- C／C++，Perl，Java，Ruby，Python等40種以上語言的自動縮排- 利用ctags的標籤中跳轉- 崩潰後-{zh-hans:文件; zh-hant:檔案;}-恢復- 光標位置和打開的緩衝狀態的保存復原（session功能）- 可以對兩個-{zh-hans:文件; zh-hant:檔案;}-進行差分，同步功能的diff模式- 遠程-{zh-hans:文件; zh-hant:檔案;}-編輯- Omni補全（上下文相關的補全）

**幫助**
Vim提供了文本形式的大量文檔。並且Vim為了能夠快速找到問題的解決方案，提供了各種各樣的功能。根據Vim自己的幫助文件語法，關鍵字會被各種各樣醒目的顏色表示出來。可以用快捷鍵像在瀏覽器中那樣瀏覽幫助文件。在GUI版的Vim中還可以使用鼠標在幫助文件中移動。方便用戶尋找問題解決方案的功能還不止這些，其中最主要的是':helpgrep'命令。使用這條命令，用戶可以在所有幫助文件中搜索想要察看的內容，用':cwindows'可以在另一個窗口中表示搜索的結果，根據搜索的結果自動在幫助文件內跳轉。使用Vim的幫助功能，更可以在搜索的結果中，繼續進行搜索。

**程序開發相關功能**
Vim是程序員為了方便的編寫程序而開發的文本編輯器。Vim具有可以讓寫代碼的工作變得輕鬆愉快的各種各樣功能。和集成開發環境一樣，Vim具有可以配置成在編輯代碼源文件之後直接進行編譯的功能。編譯出錯的情況下，可以在另一個窗口中顯示出錯誤。根據錯誤信息，直接跳轉到正在編輯的源文件出錯位置。代碼高亮，文本摺疊，上下文關聯補完都是對程序員特別有幫助的功能（參考':help quickfix'）

**文件比較**
可以逐行的對文本文件進行比較。Vim可以並排顯示兩個版本的文件，同時以各種各樣的顏色來表示有差別部分。改變過、新增的或者是被刪除的行會以顏色高亮來強調，沒有改變過的部分則會被自動摺疊表示。
對於已經在vim中打開的兩個緩衝區，分別使用：diffthis之後將會對這兩個緩衝區的內容進行比較，被比較的緩衝區可以是一個尚未存盤的內存中的緩衝區。
在比較兩個文件的不同之處時，可以用：diffget和：diffput命令對每一處不同進行雙向的同步，也可以在比較不同時對內容進行其它編輯，然後用：diffupdate對最新內容重新進行比較。
在瀏覽兩個文件的不同之處時，可以用c和c兩個Normal模式的命令直接跳轉到上一個和下一個不同之處。
可以通過diffopt等選項更精細地控制哪些區別被認為是真正的不同之處，比如可以設置比較時忽略空白字符數量的不同。
Unix下可以用vimdiff命令來使用這個功能。

**腳本語言**
Vim有其腳本語言Vimscript，使用Vimscript寫成的巨集可以實現自動執行復雜的操作。用 -s選項啟動Vim，或者直接切換到宏所在目錄使用':source'命令都可以執行Vim腳本。Vim的配置文件就可以作為Vim腳本的一個範例，Unix和Linux下配置文件名是.vimrc，Windows下配置文件一般叫做_vimrc。這個文件在啟動Vim的時候被自動執行。Vimscript可以使用Vim 命令行模式的所有命令，使用':normal'命令還可以使用通常模式中的所有命令。Vimscript具有數字，字符串兩種數據類型。用數字代表布爾類型，0代表假，之外的數全代表真。最新的Vim 7更提供了列表、關聯數組等高級數據結構。Vimscript也擁有各種比較運算符和算術運算符。控制結構實現了if分支和for/while循環。用戶還可以自己定義函數，並且可以使用超過100種的預定義函數。編寫成的腳本文件可以在調試模式中進行調試。

**不足之處**
 大文件讀取速度很慢（可在vim.org下載並安裝名為LargeFile的Script來優化） LargeFile date=20210412024926 - 即使文件不大，如果有非常長的行的話，處理也會變慢（同上）- vim自己的腳本語言處理速度不快，若是安插過多腳本套件，啟動速度會變慢。- 存在類似Ctrl-1等不能被映射的鍵（限於某些字符終端的性能）

**Neovim**
Neovim
Neovim是Vim的一個重構版本，致力於成為Vim的超集（superset）。Neovim和Vim配置文件採用相同的語法，所以Vim的配置文件也可以用於Neovim。Neovim的第一個版本在2015年12月發行，並且能夠完全兼容Vim的特性。
Neovim項目從2014年發起，有許多來自Vim社區的開源開發者為其提供早期支持，包括更好的腳本支持、插件以及和更好地融合圖形界面等。Neovim項目在2014年3月23號成功獲得捐款，足夠支持一名全職開發者。還有很多其他發揮Neovim功能的前端正在開發中。
相比於Vim，Neovim的主要改進在於其支持異步加載插件。此外，Neovim的插件可以用任意語言編寫，而Vim的插件僅能使用Vimscript進行編寫。Neovim在Ubuntu發行版中可以用PPA源進行安裝，同時也支持採用其他包管理器進行安裝，因此在各種Linux發行版中都可以順利安裝。

**參見**
 Vi- Emacs- 編輯器之戰——Emacs和vi（Vim）文本編輯器的用戶之間的競爭- 文件編輯器列表- 文本編輯器比較- VimIM——Vim的一個插件中文輸入法- Vimperator

**參考文獻**

**外部鏈接**
  vim.org  date=20040615072641 （官方主頁）-  Vim Chinese Documentation date=20220506153408 （Vim中文文檔）-  spanish passion-  大家來學VIM（一個歷久彌新的編輯器） date=20201109154930 -  碎碎念（HQ零零E的Vim進階blog）