歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Vi 命令簡單易懂講解

Vi 命令簡單易懂講解

日期:2017/2/28 15:57:34   编辑:Linux教程

目錄

  1. 正文
  2. 打開文件進入編輯
  3. 注意當前模式
  4. 光標移動
  5. 插入內容
  6. 刪除
  7. 撤銷操作
  8. 拷貝粘貼
  9. 保存/退出
  10. 在兩個文件中復制粘貼
  11. 搜索字符串
  12. 替換字符串

正文

下面介紹vi 的一般用法,本文適合初學者入門,但不適合作為手冊進行查詢,如果需要以命令導向的手冊,請使用$ man vi|more

打開文件進入編輯

編輯一個文件:

$ vi example.txt

同時編輯多個文件:

$ vi file1 file2 ... fileN

如果使用vi 編輯的某個文件沒有正常保存退出,會遺留一個隱含的文件:.filename.swp ,使用如下命令恢復從最後一次保存到非正常退出前所做的編輯:

$ vi -r filename

注意當前模式

進入文件編輯後,vi有四種模式,一種是插入模式(按鍵盤i 進入),這個模式下鍵盤輸入會作為字符增加到文件中。

另一種是編輯模式,這個狀態下可以直接輸入命令來移動光標,刪除字符等操作,不需要回車確認,每一個命令按鍵都會直接發生作用。在插入模式下按ESC 鍵會回到編輯模式。

第三種是命令模式,在編輯模式下按冒號":" 即進入命令模式,這時鍵盤輸入的字符會出現在屏幕下方,回車後,命令執行。這個模式下可以輸入保存、字符串搜索、退出編輯等命令。命令模式下,按回車或者ESC 鍵,回到編輯模式。

第四種是搜索模式,在編輯模式下輸入斜槓"/" 或者問號"?" 即進入搜索模式。

上面的四種模式是我為了描述方便所起的名字,下面將引用到。

光標移動

光標的上、下、左、右移動,分別對應按鍵:k、j、h、l (編輯模式)。

定位到最後一行,輸入大寫G(編輯模式)。

回到第一行,輸入小寫g(編輯模式)。

跳到第n 行,在命令模式下輸入數字n ,回車。

顯示當前所在行數和列數,編輯模式下輸入ctrl+g 。

插入內容

在當前字符前面插入內容,編輯模式下輸入i ,進入了插入模式,然後輸入內容,輸入完成之後,按ESC 回到編輯模式。

在當前字符後面插入內容,編輯模式下輸入a ,其它操作與上面相同。

在本行首插入內容,編輯模式下輸入大寫I 。其它操作與上面相同。

在本行尾追加內容,編輯模式下輸入大寫A 。其它操作與上面相同。

刪除

刪除當前光標的字符,編輯模式下輸入x ,如果希望刪除當前光標前面的字符,輸入大寫X 。

刪除一行,編輯模式下連續兩次輸入d 。刪除一個單詞,編輯模式下依次輸入dw 。

從當前光標刪除至行尾,編輯模式下依次輸入d$ 。

撤銷操作

撤銷剛才的一次修改,編輯模式下輸入u ,撤銷對這一整行的修改,輸入大寫U 。

如果希望撤銷對文件的所有修改,命令模式下依次輸入e! ,回車(輸入冒號":" 進入命令模式,:e!)。

拷貝粘貼

拷貝一行內容,編輯模式下連續輸入兩次y 。

將剪貼板中的一行粘貼到當前行的後面,編輯模式下輸入p 。

拷貝n 行內容,編輯模式下輸入數字n(n是要拷貝的行數,從當前行算起),然後輸入y ,拷貝完成,輸入p 粘貼多行。

保存/退出

如果保存並關閉文件,命令模式下輸入x ,回車即可。

如果保存,同時繼續文件編輯,命令模式下輸入w ,回車。

如果放棄所有更改,直接退出,命令模式下輸入q! ,回車。

命令模式下輸入wq 與x 等價。

在兩個文件中復制粘貼

需要將file2 的某行粘貼到file1 中。

同時打開兩個文件,中間用空格分隔:

$ vi file1.txt file2.txt

打開後當前編輯的為file1 ,在命令模式下輸入n ,切換到file2。

找到相關行,編輯模式下輸入yy ,再進入命令模式,輸入大寫N ,切換回上一個文件(以打開順序為准),找到相關位置,編輯模式下輸入p ,粘貼完畢。

搜索字符串

要搜索字符串abc ,在搜索模式下(編輯模式下輸入斜槓"/" 或者問號"?" 即進入搜索模式),輸入abc ,回車。

如果找到,光標會定位到從當前位置到第一個出現字符串abc 的位置,輸入n 會跳到下一個abc 出現的位置,輸入大寫N ,跳到上一個abc 出現的位置。

斜槓"/" 與問號"?" 的區別,前者向後正向搜索,後者向前反向搜索。

替換字符串

要將當前行中的所有字符串abc 替換成efg ,命令模式下輸入s/abc/efg/g ,回車。

上面命令只會替換abc 而不會替換ABC 或者aBc 。如果希望忽略大小寫,加上參數i ,s/abc/efg/gi ,回車。

如果希望進行全文件范圍替換,命令模式下輸入%s/abc/efg/g ,回車。

如果替換的字符串中包含了例如斜槓"/" 這樣的特殊字符,使用反斜槓"\" 轉義。

命令模式下,輸入%s/\/image/\/img/gi ,回車

以上命令會將文件中所有的字符串/image 替換成 /img ,並且不區分image 的大小寫。

Copyright © Linux教程網 All Rights Reserved