vi 是"Visual Interface" 的簡稱,它在Linux 上的地位就仿佛Edit 程序在DOS上一樣。它可以執行輸出、刪除、查找、替換、塊操作等眾多文本操作,而且用戶可以根據自己的需要對其進行定制,這是其他編輯程序所沒有的。
vi 不是一個排版程序,它不象Word 或WPS 那樣可以對字體、格式、段落等其他屬性進行編排,它只是一個文本編輯程序。
vi 沒有菜單,只有命令,且命令繁多。限於篇幅,本文只介紹常用的命令。
Vi 有三種基本工作模式:命令行模式,文本輸入模式和末行模式。
命令行模式:
任何時候,不管用戶處於何種模式,只要按一下“ESC” 鍵,即可使vi 進入命令行模式;當在shell 環境下輸入vi 命令啟動vi 編輯器時,也是處於該模式下。
在該模式下 ,用戶可以輸入各種合法的vi 命令,用於管理自己的文檔。此時從鍵盤上輸入的任何字符都被當作編輯命令來解釋,若輸入的字符是合法的vi 命令,則vi 在接受用戶命令之後完成相應的動作(但需注意的是,所輸入的命令並不在屏幕上顯示出來)。若輸入的字符不是vi 的合法命令,vi 會響鈴報警。
文本輸入模式:
在命令模式下輸入插入命令 i、 附加命令a 、打開命令 o、 修改命令c 、取代命令r 或替換命令s 都可以進入文本輸入模式。在該模式下,用戶輸入的任何字符都被vi 當做文件內容保存起來,並將其顯示在屏幕上。在文本輸入過程中,若想回到命令模式下,按“ESC” 鍵即可。
末行模式:
在命令模式下用戶按“:” 鍵即可進入末行模式下,此時Vi 會在顯示窗口的最後一行(通常也是屏幕的最後一行)顯示一個“:” 作為末行模式的提示符,等待用戶輸入命令。多數文件管理命令都是在此模式下執行的(如把編輯緩沖區的內容寫到文件中等)末行命令執行完後,vi 自動回到命令模式。
若在末行模式下輸入命令過程中改變了主意, 可按“ESC” 鍵或用退格鍵將輸入的命令全部刪除之後,再按一下退格鍵,即可使vi 回到命令模式下。
vi 的進入與退出
在 shell 模式下,鍵入vi 及需要編輯的文件名,即可進入vi. 例如:
vi example.txt
即可編輯 example.txt 文件.如果該文件存在,則編輯界面中會顯示該文件的內容,並將光標定位在文件的第一行;如果文件不存在,則編輯界面中無任何內容。如果需要在進入vi 編輯界面後,將光標置於文件的第n 行,則在vi命令後面加上“+n” 參數即可。例如需要從example.txt 文件的第5 行開始顯示,則使用如下命令:
vi +5 example.txt
退出 vi 時,需要在末行模式中輸入退出命令“q”。 如果在文本輸入模式下,首先按“ESC” 鍵進入命令模式,然後輸入“:” 進入末行模式在末行模式下,可使用如下退出命令:
:q 直接退出。 如果在文本輸入模式下修改了文檔內容,則不能退出。
:wq 保存後退出。
:x 同“ wq”。
:q! - 不保存內容, 強制退出。
vi 中顯示行號
在末行模式下,輸入如下命令。
set number
可使 vi 在編輯界面中顯示行號。
此外 ,在末行模式下,可使用如下“nu” 命令(number 的簡寫)來顯示光標所在行的行號及該行的內容。
光標移動操作
全屏幕文本編輯器中, 光標的移動操作無疑是最經常使用的操作了。用戶只有熟練地使用移動光標的這些命令,才能迅速准確地到達所期望的位置處進行編輯。
vi 中的光標移動既可以在命令模式下,也可以在文本輸入模式下,但操作的方法不盡相同。
在文本輸入模式下, 可直接使用鍵盤上的四個方向鍵移動光標;在命令模式下,有很多移動光標的方法。不但可以使用四個方向鍵來移動光標,還可以用h 、j、 k、 l 這四個鍵代替四個方向鍵來移動光標,這樣可以避免由於不同機器上的不同鍵盤定義所帶來的矛盾,而且使用熟練後可以手不離開字母鍵盤位置就能完成所有操作,從而提高工作效率。
以下命令均在命令行模式下完成光標移動:
h 光標左移, 如果在按h 命令前輸入數字n ,則光標左移n 個字符;
l 光標右移 ,如果在按l 命令前輸入數字n, 則光標右移n 個字符;
j 光標上移, 如果在按j 命令前輸入數字n, 則光標上移n 個字符;
k 光標下移, 如果在按k 命令前輸入數字n ,則光標xia 移n 個字符;
0 (零) 光標移到行首;
$ 光標移到行尾;
H 光標移到屏幕上顯示的第一行 (並不一定是文件頭);
L 光標移到屏幕上顯示的最後一行 (並不一定是文件尾);
M 光標移到屏幕的中間一行;
nG 光標移到第 n 行;
w或W 將光標右移至下一個單詞的詞首;
e 或E 如果光標起始位置處於單詞內(即非單詞尾處),則該命令將把光標移到本單詞詞尾;如果光標起始位置處於單詞尾,則該命令將把光標移動到下一個單詞的詞尾。
b 或B 如果光標處於所在單詞內(即非單詞首),則該命令將把光標移至本單詞詞首;如果光標處於所在單詞的詞首,則該命令將把光標移到上一個單詞的詞首;
Ctrl+G 狀態命令, 顯示當前編輯文檔的狀態。包括正在編輯的文件名、是否修改過、當前行號、文件的行數以及光標之前的行占整個文件的百分比。
此外 ,也可以通過以下末行模式下的命令完成光標在整個文件中的
移動操作:
:n 光標移到文件的第n 行;
:$ 光標移到文件的最後一行;
文本插入操作
在命令模式下 ,用戶輸入的任何字符都被vi 當作命令加以解釋執行,如果用戶要將輸入的字符當作是文本內容時,則首先應將vi 的工作模式從命令模式切換到文本輸入模式。切換的方式是使用下面的命令:
1. 插入(Insert) 命令
vi 提供了兩個插入命令:i 和I。
(1) . i 命令插入文本從光標所在位置前開始, 並且插入過程中可以使用鍵刪除錯誤的輸入。此時vi 處於插入狀態,屏幕最下行顯示“--INSERT--” 插入字樣。
(2) . I 命令 該命令是將光標移到當前行的行首, 然後在其前插入文本。
2. 附加(append) 命令
vi 提供了兩個附加插入命令:a 和A。
(1) . a 命令該命令用於在光標當前所在位置之後追加新文本, 新輸入的文本放在光標之後,在光標後的原文本將相應地向後移動,光標可在一行的任何位置。