歡迎您光臨本站 註冊首頁

對話 UNIX: 新改進的 Vim 編輯器

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
如果您曾和 IBM® AIX®(UNIX® 的一個版本)或 Linux® 打過交道,使用的很可能是 vi 編輯器。自 1976 年提出 vi 的概念開始,它已經成為編輯文件的主要工具。您可能會問:“有比 vi 功能更強大的編輯工具嗎?”當然有,那就是 Vim,本文將詳細介紹 Vim 增強功能,這些增強功能使 Vim 成為 UNIX 和 Linux 領域中廣泛使用的編輯器。

vi 程序是一個功能強大的文本編輯器。Sun Microsystems 的共同創始人 William Joy 最初在 1976 年編寫了針對 Berkeley Software Distribution(BSD)UNIX 早期版本的 vi 編輯器。據說 Bill 一個周末就編寫了 vi,不過他說這純屬謠言。該程序以 UNIX 擴展行編輯器中的 visual 命令命名 — 簡稱為 ex。

vi 編輯器是一個功能很強的編輯器,它有幾個許多人都沒有發覺的功能。Vi 是一個模型編輯器,因此不同的設置會產生不同的結果。vi 中有三種不同的模式:命令、插入(或 輸入)和行。在插入模式下操作時,文本被寫入臨時編輯文件;在一般模式下,相同的鍵擊會觸發嵌入在編輯器中的命令。要進入插入模式,按 I 鍵即可;要退出命令模式,按 Escape(我將在本文後面更詳細地介紹行模式)。

例如,在插入模式中,如果輸入字元串 10dd,該字元串會寫入臨時文件,如圖 1 所示。


圖 1. 在插入模式下輸入 dd

但是,如果處於命令模式,字元串 10dd 將從臨時文件的當前游標所在位置開始刪除 10 行,如圖 2 所示。


圖 2. 在命令模式下輸入 dd

另一個例子是游標移動。在命令模式下,鍵 H、J、K 和 L 分別將游標向左、下、上和右移動,如圖 3 所示。而在插入模式下,則顯示這些字母。


圖 3. vi 中的游標移動

通常,UNIX 用戶使用 vi,或稱為 Editor Macros(Emacs)的編輯器,它由 Richard Stallman 在 1976 年編寫。但是許多人選擇 vi,因為它是輕量級的,啟動更快,佔用的內存也更少。

Vim 是什麼?

Vim,即改進的 Vi,是由 Bram Moolenaar 在 1991 年編寫的 vi 的擴展版本。該版本最初是為 Amiga 計算機設計的,但 1992 年時在 UNIX 中迅速傳播開來。與 vi 一樣,Vim 基於命令模式和插入模式,它是一個文本用戶界面(TUI)— 如圖 4 所示。


圖 4. Vim TUI

但是它提供了一種命名為 gVim 的圖形用戶界面(GUI)— 如圖 5 所示。


圖 5. Vim GUI





Vim 命令

Vim 中的內部命令與 vi 編輯器中的內部命令類似。表 1 提供了 Vim 中的游標移動命令。


表 1. 用於移動游標的 Vim 命令
命令 動作
h 將游標向左移動
j、加號 (+)、Enter 或 Return 將游標向下移動
k、減號 (-) 將游標向上移動
l 將游標向右移動
} 將游標移動到當前段落的末尾
{ 將游標移動到當前段落的開頭
) 將游標移動到當前句子的末尾
( 將游標移動到當前句子的開頭
^ 移動到當前行的第一個非空字元
$ 移動到當前行末尾
0 (zero) 移動到當前行開頭
w or W 移動到下一單詞的開頭
b or B 移動到上一單詞的開頭
e 移動到下一單詞的末尾
H 移動到屏幕的第一行
M 移動到屏幕的中間一行
L 移動到屏幕的最後一行
G 移動到文件末尾
gg 移動到文件開頭
:n 移動到行 n

表 2 顯示了用於刪除文本的 Vim 命令。


表 2. 用於刪除文本的 Vim 命令
命令 動作
d 刪除選中的區域
dd 刪除整個當前行
10dd 刪除從當前行開始的 10 行,
dw 從當前位置向前刪除單詞
db 從當前游標位置左邊開始向後刪除單詞
dl 刪除當前游標位置的字元
dh 刪除當前游標位置左邊的字元
d0 (zero) 刪除當前游標位置到行開頭之間的單詞
D | d$ 刪除從當前游標位置開始的整個行
x 刪除游標當前位置的字元
X 刪除游標當前位置之前的字元

表 3 提供了其他幾個有用的 Vim 命令。


表 3. 常用 Vim 命令
命令 動作
ih 進入插入模式並在當前游標處插入
I 進入插入模式並在當前行的開始處插入
a 進入插入模式並追加到游標後面
A 進入插入模式並追加到當前行末尾
c 更改選中的區域
C 更改從游標當前位置開始的整個行
o 在游標當前所在行下方創建一個新空行,並將游標移動到這一新空行的開頭
O 在游標當前所在行的上方創建一個新空行,並將游標移動到這一新空行的開頭
r 替換游標當前位置的單個字元
R 替換從游標當前位置開始的多個字元,並在退出插入模式時結束
<Esc> 退出插入或可視模式
> or <Tab> 向選中區域右邊縮進
< 向選中區域左邊縮進
v 啟動時突出顯示字元
V 啟動時突出顯示的整個行
yy 將當前行移動/複製到內存
10yy 將從當前行開始的 10 行移動/複製到內存
p 粘貼複製或剪切的文本;如果字元被複制(yw dw 或 D),就在游標當前位置之後粘貼這些字元。如果複製的是行,就在游標當前所在的行下面粘貼這些行
P 作用和 p 一樣,但是它在游標當前位置的前面粘貼字元,在游標當前所在行上面粘貼行
u 撤消最後的更改
<Ctrl> R 重做
/<pattern> 搜索已找到的下一個模式,並將游標放在已找到的模式的開頭
?<pattern> 搜索已找到的上一個模式,並將游標放在已找到的模式的開頭
n 重複上一次的搜索
N 重複上一次的搜索,但搜索的方向相反
!<cmd> 在 Vim 會話外執行 <cmd>




行模式

儘管廣泛使用的是命令和插入模式,但行模式同樣重要,只是有時候沒有被充分理解和使用。行模式進入行編輯器,使您可以在一行或多行上處理命令。考慮到 vi 以 ex 編輯器命名,所以它只適合進入 ex 編輯器的行模式。

要從命令模式進入行模式,輸入冒號(:)即可。然後將游標移動到窗口左下角。繼續輸入時,所有文本都會出現在窗口底部的冒號後面。單擊 Enter,開始計算和執行行模式命令。如果確定不執行在行模式下輸入的行,則單擊 Escape 返回到命令模式。

使用編輯器的行模式時,請記住兩種命令樣式。首先,在輸入命令時,vi 或 Vim 按原樣執行命令。如果執行的命令與修改數據有關,當前行就是目標。但是,使用第二種方法可以提供行數以處理指定的行。要輸入行,請在冒號後面輸入要處理的行數或行範圍,並用逗號(,)分隔開始和結束範圍。

例如,如果只處理行 23,那麼命令以 :23 開始。如果要修改 2319 到 3819 之間的行,則輸入 :2319,3819。要處理從行 45 開始到文件結尾之間的一個命令,需要將最後行的參數替換為美元符號($)— 即 :45,$

以下命令只是可以在行模式下執行的最基本命令:

  • :w <file name>:將文件寫入磁碟。如果提供一個參數,編輯器會試圖將數據寫入 <file name>。

    注意:如果提供一個參數,而且存在 <file name>,編輯器不會覆蓋現有文件的數據。

  • :w! <file name>:將文件寫入磁碟並覆蓋文件中的所有數據。
  • :<x>,<y> w <file name>:將從 <x> 到 <y> 之間的行寫入 <file name>。
  • :q:試圖在不保存的情況下退出編輯器。

    注意:如果數據已修改,則需要先保存文件再退出編輯器,否則將導致文件未被保存。

  • :q!:退出編輯器,不將文件寫入磁碟。
  • :n:如果編輯多個文件,首先編輯編輯列表中的下一個文件。
  • :e <file name>:編輯 <file name>。
  • :e#:如果編輯兩個文件,則在兩個文件之間切換。
  • :s/<str1>/<str2>/:用當前行中的 <str2> 替換第一次出現的 <str1>。
  • :1,$ s/<str1>/<str2>/g:從行 1 開始,在整個文件中執行,用 <str2> 替換所有的 <str1>。
  • :r <file name>:將 <file name> 讀入當前編輯器會話中。
  • :<x>,<y> d:刪除從 <x> 到 <y> 之間的行。
  • :<x>,<y> y:複製從 <x> 到 <y> 之間的行。




vi 與 Vim 之間的差異

儘管 vi 與 Vim 的外觀相同,但它們確實存在區別。以下只是這兩個功能強大的文本編輯器之間的幾點區別:

  • vimscript:Vim 使用內部腳本語言 vimscript,允許複雜腳本將擴展功能添加到編輯器中。除了 vimscript,Vim 還支持 Perl、Python、Ruby、Tcl 和其他語言。
  • vimdiff:將一個稱為 vimdiff 的有用命令與 Vim 包捆綁在一起。使用 vimdiff 可以顯示相互鄰近的多個文件,類似於 sdiff,如圖 6 所示。

    圖 6. vimdiff 示例


  • 編輯壓縮文件:要保留系統上的空間,管理員通常會壓縮日誌文件或其它大型文件。經常出現這樣的情況:在壓縮了一個文件之後,總是會有人問:“請問,可以看看該日誌兩個月之前的情況嗎?”以前需要解壓文件,然後再使用 vi 編輯它。現在使用 Vim 就可以編輯壓縮文件。Vim 可以處理使用 bzip2、gzip 和 zip 壓縮的文件。
  • 編輯存檔文件:Vim 還能編輯由 tar 壓縮的文件。編輯 .tar 文件時,Vim 顯示一個簡潔屏幕,讓您選擇編輯存檔中的哪個文件,如 圖 7 所示。編輯完文件后,正常保存並退出文件(:wq),然後 Vim 會返回到顯示屏幕,允許您在存檔中選擇另一個要編輯的文件。您也可以從選擇窗口中退出(:q)。

    圖 7. 使用 Vim 在存檔文件中選擇要編輯的文件


    在圖 8 所示的例子中,使用 tar 命令存檔 4 個 ASCII 文本文件,然後使用 Vim 選擇存檔中的第二個文件進行編輯。



    圖 8. 在存檔中通過 Vim 編輯文件


  • 拆分窗口:使用 gVim,在編輯多個文件時無需在窗口之間來回切換,可以在現有文件中打開幾個窗口,並動態創建一些新文件,如圖 9 所示。

    圖 9. 在 Vim 中拆分窗口


  • 語法要點:調試別人的 shell 腳本或不是由同一個編輯器編寫的代碼是一項艱巨的任務。幸運的是,Vim 能減輕使用別人的代碼帶來的痛苦。使用 Vim,可以突出顯示代碼塊,使得在 shell 腳本和其他編程語言中的調試更簡單,如圖 10 所示。

    圖 10. 語法要點


  • 游標的最後位置:編輯文件時,有時需要退出文件來執行其他任務。但是當準備返迴文件時,已經忘記了是在何處離開的!不要擔心,Vim 會記住退出文件時游標的最後位置。在修改有好幾千行的文件時,這特別有用。
  • 多個撤消/重做操作:過去,vi 只允許在編輯文件時撤消最後一次更改。這是一個了不起的開始,但是需要改進。有時,編輯腳本或其他代碼時,看起來似乎很好的想法並不是處理問題的最佳方式,所以必須能夠回溯到在文件中進行的最後 10 次更改。Vim 允許您這樣做。
  • 可視化模式:Vim 允許使用 “可視化” 模式選擇某些文本塊。使用這種模式可以在編輯的文件中選擇任意量的文本,然後使用一個命令更改突出顯示的文本。例如,如果必須刪除文本中間一段,只需輸入 v 進入可視化模式,用游標選中要修改的文本,然後輸入 d 刪除突出顯示的文本即可。




如何獲得 Vim?

了解 vi 與 Vim 之間的一些增強與區別後,您可能會說:“我需要 Vim!從哪裡獲得它呢?”告訴您一個好消息:Vim 已經出現在幾個不同的操作系統中。

以下是幾個移植了 Vim 的平台:

  • Amiga
  • AIX
  • BSD
  • Cygwin
  • IBM OS/2®
  • Linux
  • Apple Mac OS 和 Mac OS X
  • Microsoft® MS-DOS®
  • Microsoft Windows® 95 到 Windows Vista®
  • Microsoft Windows CE
  • OpenVMS




Windows 中的 Vim

在上一小節,您已經知道可以在 Windows 使用 Vim,您現在會說:“我真的可以在 Windows 中使用 Vim 嗎?真是太好了!”是的,確實可以!

只需下載最新版的 Vim(當前版本是 7.1),將它移植到 Windows 即可,下載地址是 Vim Web 站點。最簡單的方法是下載自動安裝的可執行文件並執行它,然後按步驟操作。安裝后,右鍵單擊一個文件,單擊 Edit with Vim(如下面的圖 11 所示),便可以在 Windows 的 Vim 中編輯文件了。


圖 11. 在 Windows 中使用 Vim 編輯文件

在 Windows 計算機中安裝 Vim 后,就可以享受 Vim 提供的好處了,同時可以考慮拋棄 Windows 中的其他文本編輯器了。





結束語

vi 編輯器是 UNIX 中的文本編輯器的前身,Vim 是它的延續。閱讀本文後,希望您能學到有關 Vim 編輯器的一些新知識,並通過它的功能使您的工作更輕鬆。Vim 作為一種簡單的編輯器,已經成為一個穩定和健壯的應用程序,廣泛用於 UNIX 以及大多數其他操作系統中。如果您不經常使用 Vim,在了解它的詳細功能之後,您肯定會認為 Vim 是最好的編輯器。(責任編輯:A6)



[火星人 ] 對話 UNIX: 新改進的 Vim 編輯器已經有560次圍觀

http://coctec.com/docs/linux/show-post-69090.html