vi 和vim 的區別

宋哥發表於2017-02-21

vi 和vim 的區別

它們都是多模式編輯器,不同的是vim 是vi的升級版本,它不僅相容vi的所有指令,而且還有一些新的特性在裡面。


vim的這些優勢主要體現在以下幾個方面:
1、多級撤消
我們知道在vi裡,按 u只能撤消上次命令,而在vim裡可以無限制的撤消。
2、易用性
vi只能執行於unix中,而vim不僅可以執行於unix,windows ,mac等多操作平臺。
3、語法加亮
vim可以用不同的顏色來加亮你的程式碼。
4、視覺化操作
就是說vim不僅可以在終端執行,也可以執行於x window、 mac os、 windows。
5、對vi的完全相容
某些情況下,你可以把vim當成vi來使用。

vi和vim都是Linux中的編輯器,不同的是vim比較高階,可以視為vi的升級版本。vi使用於文字編輯,但是vim更適用於coding。 

現將vi/vim的命令列收集於下: 


vi有3個模式:插入模式、命令模式、底行模式。 

插入模式:在此模式下可以輸入字元,按ESC將回到命令模式。 
命令模式:可以移動游標、刪除字元等。 
底行模式:可以儲存檔案、退出vi、設定vi、查詢等功能(底行模式也可以看作是命令模式裡的)。 


一、開啟檔案、儲存、關閉檔案(vi命令模式下使用) 

vi filename  //開啟filename檔案 
:w           //儲存檔案 
:w vpser.net //儲存至vpser.net檔案 
:q           //退出編輯器,如果檔案已修改請使用下面的命令 
:q!          //退出編輯器,且不儲存 
:wq          //退出編輯器,且儲存檔案 

二、插入文字或行(vi命令模式下使用,執行下面命令後將進入插入模式,按ESC鍵可退出插入模式) 

a    //在當前游標位置的右邊新增文字 
i    //在當前游標位置的左邊新增文字 
A    //在當前行的末尾位置新增文字 
I    //在當前行的開始處新增文字(非空字元的行首) 
O    //在當前行的上面新建一行 
o    //在當前行的下面新建一行 
R    //替換(覆蓋)當前游標位置及後面的若干文字 
J    //合併游標所在行及下一行為一行(依然在命令模式) 

三、移動游標(vi命令模式下使用) 

1、使用上下左右方向鍵 
2、命令模式下:h   向左、j   向下 、k   向上、l  向右。 
空格鍵 向右、Backspace  向左、Enter  移動到下一行首、-  移動到上一行首。 

四、刪除、恢復字元或行(vi命令模式下使用) 

x     //刪除當前字元 
nx    //刪除從游標開始的n個字元 
dd    //刪除當前行 
ndd   //向下刪除當前行在內的n行 
u     //撤銷上一步操作 
U     //撤銷對當前行的所有操作 

五、搜尋(vi命令模式下使用) 

/vpser    //向游標下搜尋vpser字串 
?vpser    //向游標上搜尋vpser字串 
n         //向下搜尋前一個搜素動作 
N         //向上搜尋前一個搜尋動作 

六、跳至指定行(vi命令模式下使用) 
n+        //向下跳n行 
n-        //向上跳n行 
nG        //跳到行號為n的行 
G         //跳至檔案的底部 

七、設定行號(vi命令模式下使用) 

:set  nu     //顯示行號 
:set nonu    //取消顯示行號 

八、複製、貼上(vi命令模式下使用) 

yy    //將當前行復制到快取區,也可以用 "ayy 複製,"a 為緩衝區,a也可以替換為a到z的任意字母,可以完成多個複製任務。 
nyy   //將當前行向下n行復制到緩衝區,也可以用 "anyy 複製,"a 為緩衝區,a也可以替換為a到z的任意字母,可以完成多個複製任務。 
yw    //複製從游標開始到詞尾的字元。 
nyw   //複製從游標開始的n個單詞。 
y^    //複製從游標到行首的內容。  VPS偵探 
y$    //複製從游標到行尾的內容。 
p     //貼上剪下板裡的內容在游標後,如果使用了前面的自定義緩衝區,建議使用"ap 進行貼上。 
P     //貼上剪下板裡的內容在游標前,如果使用了前面的自定義緩衝區,建議使用"aP 進行貼上。 

九、替換(vi命令模式下使用) 

:s/old/new         //用new替換行中首次出現的old 
:s/old/new/g       //用new替換行中所有的old 
:n,m s/old/new/g   //用new替換從n到m行裡所有的old 
:%s/old/new/g      //用new替換當前檔案裡所有的old 

十、編輯其他檔案 

:e otherfilename    //編輯檔名為otherfilename的檔案。 

十一、修改檔案格式 

:set fileformat=unix   //將檔案修改為unix格式,如win下面的文字檔案在linux下會出現^M。 

============================================

關於vim(摘自維基百科http://zh.wikipedia.org/wiki/Vim)

Vim是從 vi 發展出來的一個文字編輯器 。程式碼補完、編譯及錯誤跳轉等方便程式設計的功能特別豐富,在程式設計師中被廣泛使用。和Emacs 並列成為類Unix系統 使用者最喜歡的編輯器。
Vim的第一個版本由Bram Moolenaar 在1991年釋出。最初的簡稱是Vi IMitation ,隨著功能的不斷增加,正式名稱改成了Vi IMproved。現在是在開放原始碼 方式下發行的自由軟體 。

Vim 歷史

Bram Moolenaar 在 80 年代末購入他的 Amiga 計算機時,Amiga 上還沒有他最常用的編輯器 vi。Bram 從一個開源的 vi 複製 Stevie 開始,開發了 Vim 的 1.0 版本。最初的目標只是完全複製 vi 的功能,那個時候的 Vim 是Vi IMitation(模擬)的簡稱。1991 年 Vim 1.14 版被 "Fred Fish Disk #591" 這個 Amiga 用的免費軟體集所收錄了。1992 年 1.22 版本的 Vim 被移植到了 UNIX 和 MS-DOS 上。從那個時候開始,Vim 的全名就變成 Vi IMproved(改良)了。
在這之後,Vim 加入了不計其數的新功能。做為第一個里程碑的是 1994 年的 3.0 版本加入了多視窗編輯模式(分割視窗)。從那之後,同一螢幕可以顯示的 Vim 編輯檔案數可以不止一個了。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教學。通常可以在Unix系統命令列下輸入 "vimtutor" 或者點選 Windows 系統桌面上的Vim教學圖示進入。在Vim使用者手冊 中更加詳細的描述了Vim的基礎和進階功能。可以在Vim中輸入 ":help user-manual" 進入使用者手冊。手冊除了原始的英文版本之外,也被志願者翻譯成了各國文字,也包括了中文。
新使用者也應該學習Vim的幫助系統。可以在Vim中輸入不帶引數的 "help" 來閱讀主幫助檔案。

模式

從 vi 派生出來的Vim具有多種模式,這種獨特的設計容易使初學者產生混淆。幾乎所有的編輯器都會有插入和執行命令兩種模式,並且大多數的編輯器使用了與 Vim 截然不同的方式:命令選單(滑鼠或者鍵盤驅動),組合鍵(通常通過control鍵(CTRL)和alt鍵(ALT)組成)或者滑鼠輸入。Vim和vi 一樣,僅僅通過鍵盤來在這些模式之中切換。這就使得Vim可以不用進行選單或者滑鼠操作,並且最小化組合鍵的操作。對文字錄入員或者程式設計師可以大大增強速 度和效率。


Vim 具有6種基本模式和5種派生模式。

1.基本模式

(1)普通模式
在普通模式中,使用者可以執行一般的編輯器命令,比如移動游標,刪除文字等等。這也是 Vim 啟動後的預設模式。這正好和許多新使用者期待的操作方式相反(大多數編輯器預設模式為插入模式)。
Vim 強大的編輯能力中很大部分是來自於其普通模式命令。普通模式命令往往需要一個操作符結尾。例如普通模式命令 "dd" 刪除當前行,但是第一個 "d" 的後面可以跟另外的移動命令來代替第二個 "d",比如用移動到下一行的 "j" 鍵就可以刪除當前行和下一行。另外還可以指定命令重複次數,"2dd"(重複 "dd" 兩次),和 "dj" 的效果是一樣的。使用者學習了各種各樣的文字間移動/跳轉的命令和其他的普通模式的編輯命令,並且能夠靈活組合使用的話,能夠比那些沒有模式的編輯器更加高 效的進行文字編輯。
在普通模式中,有很多方法可以進入插入模式。比較普通的方式是按 "a"(append/追加)鍵或者 "i"(insert/插入)鍵。
(2)插入模式
在這個模式中,大多數按鍵都會向文字緩衝 中插入文字。大多數新使用者希望文字編輯器編輯過程中一直保持這個模式。
在插入模式中,可以按 ESC 鍵回到普通模式。
(3)可視模式
這個模式與普通模式比較相似。但是移動命令會擴大高亮的文字區域。高亮區域可以是字元、行或者是一塊文字。當執行一個非移動命令時,命令會被執行到這塊高亮的區域上。Vim 的"文字物件"也能和移動命令一樣用在這個模式中。
(4)選擇模式
這個模式和無模式編輯器的行為比較相似(Windows標準文字控制元件的方式)。這個模式中,可以用滑鼠或者游標鍵高亮選擇文字,不過輸入任何字元的話,Vim 會用這個字元替換選擇的高亮文字塊,並且自動進入插入模式。
(5)命令列模式
在命令列模式中可以輸入會被解釋成並執行的文字。例如執行命令(":" 鍵),搜尋("/" 和 "?" 鍵)或者過濾命令("!" 鍵)。在命令執行之後,Vim 返回到命令列模式之前的模式,通常是普通模式。
(6)Ex 模式
這和命令列模式比較相似,在使用 ":visual" 命令離開 Ex 模式前,可以一次執行多條命令。


2. 派生模式

(1)操作符等待模式
這個派生模式指普通模式中,執行一個操作命令後 Vim 等待一個"動作"來完成這個命令。Vim 也支援在操作符等待模式中使用"文字物件"作為動作,包括 "aw" 一個單詞(a word)、"as" 一個句子(a sentence)、"ap" 一個段落(a paragraph)等等。
比如,在普通模式下 "d2as" 刪除當前和下一個句子。在可視模式下 "apU" 把當前段落所有字母大寫。
(2)插入普通模式
這個模式是在插入模式下按下ctrl-o鍵的時候進入。這個時候暫時進入普通模式,執行完一個命令之後,Vim 返回插入模式
(3)插入可視模式
這個模式是在插入模式下按下ctrl-o鍵並且開始一個可視選擇的時候開始。在可視區域選擇取消的時候,Vim 返回插入模式。
(4)插入選擇模式
通常這個模式由插入模式下滑鼠拖拽或者shift方向鍵來進入。當選擇區域取消的時候,Vim 返回插入模式。
(5) 替換模式
這是一個特殊的插入模式,在這個模式中可以做和插入模式一樣的操作,但是每個輸入的字元都會覆蓋文字緩衝中已經存在的字元。在普通模式下按 "R" 鍵進入。

其他

Evim
Evim 是一個特殊的GUI 模式用來儘量的表現的和"無模式"編輯器一樣。編輯器自動進入並且停留在插入模式,使用者只能通過選單、滑鼠和鍵盤控制鍵來對文字進行操作。可以在命令列下輸入 "evim" 或者 "vim -y" 進入。在 Windows 下,通常也可以點選桌面上 Evim 的圖示。

功能

概要

  •  根據設定可以和原始vi完全相容
  • 多緩衝編輯
  • 任意個數的分割視窗(橫,豎)
  • 具備列表 和字典 功能的指令碼語言
  • 可以在指令碼中呼叫 Perl ,Ruby ,Python ,Tcl ,MzScheme
  • 單詞縮寫功能
  • 動態單詞補全
  • 多次撤銷和重做
  • 對應400種以上文字檔案 的語法高亮
  • C /C++ ,Perl ,Java ,Ruby ,Python 等40種以上語言的自動縮排
  • 利用ctags的標籤中跳轉
  • 崩潰後檔案恢復
  • 游標位置和開啟的緩衝狀態的儲存 復原(session功能)
  • 可以對兩個檔案進行差分,同步功能的diff模式
  • 遠端檔案編輯
  • 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 有她自己的指令碼語言 ,使用指令碼語言寫成的巨集 可以實現自動執行復雜的操作。用 -s 選項啟動 Vim ,或者直接切換到巨集 所在目錄 使用 ':source' 命令都可以執行 Vim 指令碼。Vim 的配置檔案就可以作為 Vim 指令碼的一個範例,Unix 和Linux 下配置檔名是.vimrc,Windows 下配置檔案一般叫做 _vimrc。這個檔案在啟動 Vim 的時候被自動執行。Vim 指令碼語言 可以使用 Vim 命令列 模式的所有命令 ,使用 ':normal' 命令還可以使用通常模式中的所有命令。Vim 指令碼語言具有數字,字串兩種資料型別 。用數字代表布林型別 ,0代表假,之外的數全代表真。最新的 Vim 7 更提供了列表 、關聯陣列 等高階資料結構 。Vim 指令碼語言也擁有各種比較運算子 和算術運算子 。控制結構實現了 if分支 和 for/while 迴圈。使用者還可以自己定義函式 ,並且可以使用超過100種的預定義函式 。編寫成的指令碼檔案可以在除錯模式中進行除錯。

不足之處

大檔案讀取速度很慢(可用vim.org下載名為LargeFile的Script並安裝已優化)LargeFile
即使檔案不大,如果有非常長的行的話,處理也會變慢(同上)
vim自己的指令碼語言過於複雜。缺乏自動執行和視窗管理的命令。(新手往往會有這種感覺)
存在類似Ctrl-1等不能被對映的鍵(限於某些字元終端的效能)



相關文章