vi 命令介紹

 

vi 是」Visual Interface」 的簡稱,它在Linux 上的地位就彷彿Edit 程序在DOS上同樣。它能夠執行輸出、刪除、查找、替換、塊操做等衆多文本操做,並且用戶能夠根據本身的須要對其進行定製,這是其餘編輯程序所沒有的。linux

vi 不是一個排版程序,它不象Word 或WPS 那樣能夠對字體、格式、段落等其餘屬性進行編排,它只是一個文本編輯程序。shell

vi 沒有菜單,只有命令,且命令繁多。限於篇幅,本文只介紹經常使用的命令。windows

Vi 有三種基本工做模式:命令行模式,文本輸入模式和末行模式。centos

命令行模式:app

任什麼時候候,無論用戶處於何種模式,只要按一下「ESC」 鍵,便可使vi 進入命令行模式;當在shell 環境下輸入vi 命令啓動vi 編輯器時,也是處於該模式下。編輯器

在該模式下 ,用戶能夠輸入各類合法的vi 命令,用於管理本身的文檔。此時從鍵盤上輸入的任何字符都被看成編輯命令來解釋,若輸入的字符是合法的vi 命令,則vi 在接受用戶命令以後完成相應的動做(但需注意的是,所輸入的命令並不在屏幕上顯示出來)。若輸入的字符不是vi 的合法命令,vi 會響鈴報警。字體

文本輸入模式:命令行

在命令模式下輸入插入命令 i、 附加命令a 、打開命令 o、 修改命令c 、取代命令r 或替換命令s 均可以進入文本輸入模式。在該模式下,用戶輸入的任何字符都被vi 當作文件內容保存起來,並將其顯示在屏幕上。在文本輸入過程當中,若想回到命令模式下,按「ESC」 鍵便可。文檔

末行模式:get

在命令模式下用戶按「:」 鍵便可進入末行模式下,此時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 命令該命令用於在光標當前所在位置以後追加新文本, 新輸入的文本放在光標以後,在光標後的原文本將相應地向後移動,光標可在一行的任何位置。

(2) . A 命令 該命令與 a 命令不一樣的是,A 命令將把光標挪到所在行的行尾,從那裏開始插入新文本,當輸入A 命令後光,標自動移到該行的行尾。

a 和A 命令是把文本插入到行尾的惟一方法。

3. 打開open 命令

不管是 Insert 命令也好,仍是append 命令也好,所插入的內容都是從當前行中的某個位置開始的。若咱們但願在某行以前或某行以後插入一些新行,則應使用open 命令。

vi 提供了兩個打開命令:o 和O。

(1) . o 命令該命令將在光標所在行的下面新開一行, 並將光標置於該行的行首,等待輸入文本。要注意當使用刪除字符時只能刪除從插入模式開始的位置之後的字符,對於之前的字符不起做用。

(2) . O 命令和 o 命令相反,O 命令是在光標所在行的上面插入一行,並將光標置於該行的行首,等待輸入文本。

文本修改操做

在命令模式下可使用 vi 提供的各類有關命令對文本進行修改,包括對文本內容的刪除、複製、取代和替換等。

1. 文本刪除/移動

在編輯文本時 ,常常須要刪除一些不須要的文本,咱們能夠用鍵將輸錯或不須要的文本刪除,但此時有一個限制就是當刪到行頭以後,再想刪上面那行的內容是不可能的。

在命令模式下, vi 提供了許多刪除命令這些命令。大可能是以d 開頭的。經常使用的有:

(1) . 刪除單個字符

x 刪除光標處的字符。 若在x 以前加上一個數字n ,則刪除從光標所在位置開始向右的n 個字符。

X 刪除光標前面的那個字符,若在X以前加上一個數字n, 則刪除從光標前面那個字符開始向左的n 個字符。

顯然這兩個命令是刪除少許字符的快捷方法。

(2) . 刪除多個字符

dd 刪除光標所在的整行。 在dd 前可加上一個數字n ,表示刪除當前行及其後n-1 行的內容。

D 或d$ 兩命令功能同樣, 都是刪除從光標所在處開始到行尾的內容。

d0 刪除從光標前一個字符開始到行首的內容。

dw 刪除一個單詞 。若光標處在某個詞的中間,則從光標所在位置開始刪至詞尾。同dd 命令同樣,可在dw以前加一個數字n 。表示刪除n 個指定的單詞。

若是用戶不當心進行了誤刪除操做,也沒關係vi ,提供了恢復誤操做的命令,而且能夠將恢復的內容移動,放在文本的任何地方。恢復命令用「np」, 其中n 爲須要恢復的次數。例如使用dd 命令刪除了一行內容,而後使用「2p」命令,則被刪除的內容會被從新插入兩遍。

經過 dd 命令及p 命令的結合使用,能夠很方便的實現文本行的移動操做。

2. 文本複製命令

yy 複製光標所在的整行。 在yy 前可加上一個數字n ,表示複製當前行及其後n-1 行的內容。

文本行復制後, 經過使用上面介紹的「p」 命令,能夠將文本行粘貼到任何地方。

dd、 yy 及p 命令在vi 中的做用,相似於Windows 中圖形編輯程序的「剪切」、「複製」及「粘貼」命令。

3. 取消上一命令(Undo)

取消上一命令 (Undo), 也稱復原命令,是很是有用的命令,它能夠取消前一次的誤操做或不合適的操做對文件形成的影響,使之回覆到這種誤操做或不合適操做被執行以前的狀態。

取消上一命令有兩種形式, 在命令模式下鍵入字符u 和U 它們的功能都是取消剛纔輸入的命令,恢復到原來的狀況。小寫u 和大寫U 在具體細節上有所不一樣,兩者的區別在於,大寫U命令的功能是恢復到誤操做命令前的狀況,即若是插入命令後使用U 命令,就刪除剛剛插入的內容;若是刪除命令後使用U 命令,就至關於在光標處又插入剛剛刪除的內容。這裏把全部修改文本的命令都視爲插入命令,也就是說U 命令只能取消前一步操做,若是用U命令撤消了前一步操做,當再按U 鍵時,並非撤消再前一步的操做,而是撤消了剛纔U命令執行的操做,也就是又恢復到第一次使用U 命令以前的狀態,結果是什麼都沒作。而小寫u 命令的功能是把當前行恢復成被編輯前的狀態,而無論此行被編輯了多少次。

4. 重複命令(Redo)

重複命令也是一個很是經常使用的命令。 在文本編輯中常常會碰到須要機械地重複一些操做,這時就須要用到重複命令。它可讓用戶方便地再執行一次前面剛完成的某個複雜的命令。

重複命令只能在命令模式下工做, 在該模式下按「.」 鍵既可。執行一個重複命令時,其結果是依賴於光標當前位置的。

文本搜索與替換操做

在進行文本編輯的時候,,您能夠須要搜索或定位特定的單詞或單詞的一部分。vi 編輯器有向前或向後搜索指定模式的功能。

「/」 是vi 編輯器的模式搜索命令。鍵入「/」 後,屏幕的底部會出現一行,同時一個斜扛會出如今底行的行首上,且光標被放置在斜扛以後。此時,您能夠在光標位置鍵入你須要搜索的模式。輸入完成並按下ENTER鍵後,編輯器將開始從光標所在的位置起向文件尾部搜索你鍵入的模式。若是輸入的模式被找到,光標將停留在找到的模式上。在找到一個匹配的模式後,若是您還須要搜索下一個匹配的模式,使用命令「n」 便可;若是須要找到上一個匹配的模式,則使用「N」 命令便可。

此外,「 ?」 命令也是模式搜索命令。與「/」 的區別在於/ 是從光標當
前所在位置向文件尾部搜索,而「?」 命令則是由光標當前所在位置向文件頭部搜索。

文本替換操做須要使用末行模式進行操做 即全部文本替換操做命令均以「:」開頭。

文本替換命令的格式爲:

:s/text1/text2 用於將光標所在段落搜索到的第一個 「text1」 替換爲「text2」;

:s/text1/text2/g 用於將光標所在段落的全部 「text1 」替換爲「text2」;

:m,ns/text1/text2/g 用於將從 m行開始至n 行結束的全部搜索到的「text1」替換爲text2。 其中可使用$表示末行,即「1,$」 表示替換文檔中的全部符合條件的字符。

相關文章
相關標籤/搜索