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 文件名來恢復未保存的內容