vi詳解

jopen 10年前發布 | 16K 次閱讀 Vi

VI 由加州大學伯克利分校,Bill Joy 研究開發。

文本編輯器有很多,比如圖形模式的gedit、kwrite、OpenOffice,文本模式下的編輯器有vi、vim(vi的增強版本)。vi和 vim是我們在Linux中最常用的編輯器。vi或vim是Linux最基本的文本編輯工具,vi或vim雖然沒有圖形界面編輯器那樣點鼠標的簡單操作,但vi編輯器在系統管理、服務器管理字符界面中,永遠不是圖形界面的編輯器能比的。

vi常用命令

(注意:vi是unix/linux操作系統中最經典的文本編輯器,只能是編輯字符,不能對字體、段落進行排版;它既可以新建文件,也可以編輯文件;他沒有菜單,只有命令,且命令繁多。

雖然vi的操作方式與其他常用的文本編輯器(如gedit)很不相同 ,但是由于其運行于字符界面,并可用于所有unix/linux環境,目前仍被經常使用。)

vi 的三種命令模式

Command(命令)模式,用于輸入命令

Insert(插入)模式,用于插入文本

Visual(可視)模式,用于視化的的高亮并選定正文

光標移動

(注:不同的版本所給與vi的三種工作模式也不同。vi有三種工作模式:命令模式、文本編輯模式和最后行模式。不同工作模式下的操作方法有所不同。

1.命令模式:

命令模式是啟動vi后進入的工作模式,并可轉換為文本編輯模式和最后行模式。在命令模式下,從鍵盤上輸入的任何字符都被當作編輯命令來解釋,而不會在屏幕上顯示。如果輸入的字符是合法的vi命令,則vi就會完成相應的動作;否則vi會響鈴警告。

2.文本編輯模式:

文本編輯模式用于字符編輯。在命令模式下輸入i(插入命令)、a(附加命令)等命令后進入文本編輯模式,此時輸入的任何字符都被vi當作文件內容顯示在屏幕上。按Esc鍵可從文本編輯模式返回到命令模式。

3.最后行模式:

在命令模式下,按“:”鍵進入最后行模式,此時vi會在屏幕的底部顯示“:”符號年作為最后行模式的提示符,等待用戶輸入相關命令。命令執行完畢后,vi自動回到命令模式。

為了實現跨平臺操作兼容不同類型的鍵盤,在vi編輯器中無論是輸入命令還是輸入內容都是用字母鍵。例如按字母鍵“i”在文本編輯模式下表示輸入字母“i”,如果在命令模式下則表示將工作模式轉換為文本編輯模式。)

 

當我們按ESC進入Command模式后,

#我們可以用下面的一些鍵位來移動光標;
j 向下移動一行
k 向上移動一行
h 向左移動一個字符
l 向右移動一個字符
ctrl+b 向上移動一屏
ctrl+f 向下移動一屏
向上箭頭 向上移動
向下箭頭 向下移動
向左箭頭 向左移動
向右箭頭 向右移動
我們編輯一個文件時,對于 j、k、l和h鍵,還能在這些動作命令的前面加上數字,比如 3j,表示向下移動3行。
/# +Enter #為查找的內容
插入模式(文本的插入)
i 在光標之前插入
a 在光標之后插入
I 在光標所在行的行首插入
A 在光標所在行的行末插入
o 在光標所在的行的下面插入一行
O 在光標所在的行的上面插入一行
s 用輸入的文本替換光標所在字符
S 用輸入的文本替換光標所在行
文本內容的刪除操作;
x 一個字符
#x 刪除幾個字符,#表示數字,比如3x
dw 刪除一個單詞
#dw 刪除幾個單詞,#用數字表示,比如3dw表示刪除三個單詞
dd 刪除一行;
#dd 刪除多個行,#代表數字,比如3dd 表示刪除光標行及光標的下兩行
d$ 刪除光標到行尾的內容
J 清除光標所處的行與下一行之間的換行,行尾沒有空格的話會自動添加一個空格。
#J 表示合并#(數字)行。
退出保存;
在命令模式下按 shift+: 文本底端出現冒號
:w     保存;
:w filename 另存為filename;
:wq!  保存退出;
:wq! filename 注:以filename為文件名保存后退出;
:q!   不保存退出;
:x    應該是保存并退出 ,功能和:wq!相同
#撤銷操作
u    命令取消最近一次的操作,可以使用多次來恢復原有的操作[1]
U    取消所有操作
Ctrl+R可以恢復對使用u命令的操作
復制操作
yy    命令復制當前整行的內容到vi緩沖區
yw    復制當前光標所在位置到單詞尾字符的內容到vi緩存區,相當于復制一個單詞
y$    復制光標所在位置到行尾內容到緩存區
y^    復制光標所在位置到行首內容到緩存區
#yy    例如:5yy就是復制5行
#yw    例如:2yw就是復制兩個單詞
如果要復制第m行到第n行之間的內容,可以在末行模式中輸入m,ny例如:3,5y復制第三行到第五行內容到緩存區。
#查找和替換
#vi的查找和替換功能主要在末行模式完成:
#至上而下的查找
/ 要查找的字符串,其中/代表從光標所在位置起開始查找,例如:/ work
#至下而上的查找
?    要查找的字符串 例如:? work
#替換
:s/old/new              用new替換行中首次出現的old
: s/old/new/g           用new替換行中所有出現的old
:#,# s/old/new/g        用new替換從第#行到第#行中出現的old
:% s/old/new/g          用new替換整篇中出現的old
如果替換的范圍較大時,在所有的命令尾加一個c命令,強制每個替換需要用戶進行確認,例如:s/old/new/c 或s/old/new/gc
恢復文件
#vi在編輯某一個文件時,會生成一個臨時文件,這個文件以 . 開頭并以 .swp結尾。正常退出該文件自動刪除,如果意外退出例如忽然斷電,該文件不會刪除,我們在下次編輯時可以選擇一下命令處理:
O    只讀打開,不改變文件內容
E    繼續編輯文件,不恢復.swp文件保存的內容
R    將恢復上次編輯以后未保存文件內容
Q    退出vi
D    刪除.swp文件
或者使用vi -r 文件名來恢復未保存的內容

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!