vi操作指令
?
一、VI編輯器常用操作
1)、進入輸入模式
|   vi切換到輸入模式的正規方法  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   a  |   在當前光標之后輸入  | 
|   A  |   在當前行之末輸入  | |
|   ***  |   i  |   在當前光標之前輸入  | 
|   I  |   在當前行之首輸入  | |
|   ***  |   o  |   在當前行之下新增一行,并在新增行輸入  | 
|   O  |   在當前行之上新增一行,并在新增行輸入  | |
輸入結束后,按Esc鍵退出輸入模式。
2)、光標移動
|   vi光標移動  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   h  |   向左移動一個字節  | 
|   ***  |   l  |   向右移動一個字節  | 
|   ***  |   j  |   向下移動一個字節  | 
|   ***  |   k  |   向上移動一個字節  | 
|   *  |   b  |   左移一個單詞,至詞首  | 
|   *  |   w  |   右移一個單詞,至詞首  | 
|   *  |   e  |   右移一個單詞,至詞尾  | 
|   *  |   :0  |   移動到文檔起始位置  | 
|   *  |   0  |   移到當前行行首  | 
|   *  |   ^  |   移動到本行行首第一個可見字符  | 
|   *  |   $  |   移到當前行行尾  | 
|   +  |   移至下一行的行首  | |
|   -  |   移至上一行的行首  | |
|   H  |   移至視窗的第一行  | |
|   M  |   移至視窗的中間一行  | |
|   L  |   移至視窗的最后一行  | |
|   G  |   移至該文件的最后一行  | |
|   vi光標移動  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   nG  |   移至該文檔的第n行  | 
|   **  |   N+  |   下移n行  | 
|   **  |   n-  |   上移n行  | 
|   **  |   {  |   光標移動到上一個空行  | 
|   **  |   }  |   光標移動到下一個空行  | 
|   **  |   [[  |   光標移動到下一個函數起始位置(’{‘字符所在位置)  | 
|   **  |   ]]  |   光標移動到上一個函數起始位置(’{‘字符所在位置)  | 
|   **  |   (  |   光標移動到上一段落起始位置,空行也被認為是段落(多個連續空行被認為是一個段落)  | 
|   **  |   )  |   光標移動到下一段落起始位置,空行也被認為是段落(多個連續空行被認為是一個段落)  | 
以上命令從h到e,均可指定重復操作次數,如5h表示光標向前移動5個字節,10j表示向下移動10行。
3)、視窗移動
|   vi視窗移動  | ||
|   重要度  |   指令  |   功能說明  | 
|   **  |   <Ctrl> + f  |   視窗下卷一頁  | 
|   **  |   <Ctrl> + b  |   視窗上卷一頁  | 
|   **  |   <Ctrl> + d  |   視窗下卷半頁  | 
|   **  |   <Ctrl> + u  |   視窗上卷半頁  | 
|   **  |   <Ctrl> + e  |   視窗下卷一行  | 
|   **  |   <Ctrl> + y  |   視窗上卷一行  | 
4)、刪除操作
|   Vi刪除操作  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   x  |   刪除光標所在字節  | 
|   ***  |   X  |   刪除光標前一字節  | 
|   ***  |   dw  |   從光標當前位置開始向后刪除一個單詞  | 
|   ***  |   db  |   從光標當前位置開始向前刪除一個單詞  | 
|   ***  |   d0  |   從行首刪除至當前光標位置  | 
|   ***  |   d$  |   從光標當前位置刪除至行尾  | 
|   ***  |   dd  |   刪除光標所在行  | 
|   ***  |   D  |   同d$  | 
|   ***  |   dG  |   刪除從當前光標位置知道文檔末尾的所有內容。  | 
以上x,X,dw,db,dd可以指定字符/行數,如3x表示刪除從當前光標所在位置起的3個字符,3dd表示刪除從當前光標所在行開始的3行。
5)、拷貝和粘貼操作
|   Vi拷貝粘貼  | ||
|   重要度  |   指令  |   功能說明  | 
|   **  |   [n]yy  |   拷貝一行或n行  | 
|   p  |   粘貼剛剛拷貝或者刪除(d*命令操作的內容)到當前光標后面,如果如果是單詞則粘貼到當前行,其他內容則在當前光標所在行后面添加新行進行粘貼  | |
|   **  |   P  |   粘貼剛剛拷貝或者刪除(nx或者d*命令操作的內容)到當前光標后面,如果如果是單詞則粘貼到當前行,其他內容則在當前光標所在行后面添加新行進行粘貼  | 
6)、修改操作
|   Vi修改操作  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   s  |   修改光標所在字節,修改完成后按Esc鍵結束  | 
|   S  |   修改整行內容,修改完成后按Esc鍵結束  | |
|   *  |   r  |   替換當前光標所在字節  | 
|   *  |   R  |   進入替換狀態,直至按Esc鍵結束  | 
|   *  |   cw  |   修改一個單詞(從光標位置至詞尾)  | 
|   cb  |   修改一個單詞(從詞首至光標位置)  | |
|   *  |   cc  |   修改整行內容,完成后按Esc鍵結束,同S  | 
|   *  |   c0  |   修改行首至光標位置的內容  | 
|   *  |   c$  |   修改光標位置至行尾的內容  | 
|   ~  |   光標所在字節大小寫切換  | |
7)、指令重復
|   Vi指令重復  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   nx  |   刪除n個字節  | 
|   ***  |   ndd  |   刪除n行  | 
|   ***  |   ns  |   修改n個字節  | 
在指令模式中,可在指令前面加入一個數字n,則該指令會重復執行n次。常用的重復操作有:
8)、取消前一個操作
|   Vi取消前一個操作  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   u  |   撤消上一指令的結果  | 
|   **  |   U  |   撤銷本行上的所有修改  | 
9)、查找字符串
|   Vi查找字符串  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   /字符串  |   從當前光標向后查找該字符串  | 
|   ***  |   ?字符串  |   從當前光標向前查找該字符串  | 
|   ***  |   n  |   從當前光標向后查找下一個字符串  | 
|   ***  |   N  |   從當前光標向前查找下一個字符串  | 
|   #  |   向上查找當前光標所在位置的單詞,如果當前位置為空白,則為其后的第一個單詞  | |
|   *  |   向下查找當前光標所在位置的單詞,如果當前位置為空白,則為其后的第一個單詞  | |
10)、查看編輯狀況
|   Vi查看編輯狀況  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   <Ctrl> + g  |   顯示正在編輯的文件名、當前光標所在行數、文件總行數、文件是否被修改  | 
11)、括號匹配
|   Vi括號匹配  | ||
|   重要度  |   指令  |   功能說明  | 
|   *  |   %  |   定位到匹配的“(”、“)”、“{”、“}”  | 
括號匹配符可以用在各種指令中,如d%表示從但前光標位置刪除到匹配的“(”“)”“{”“}”的位置,c%表示替換從當前光標到配置的“(”“)”“{”“}”位置,y%表示拷貝從當前光標位置到其后匹配的“)”或“}”。
當光標不在“(”“)”“{”“}”上時,默認找其后最近的“(”,然后找“{”,如:
if ( Dflag != TMD && ( rflag != READABLE || wflag != WRITEABLE ) ) {
…
}
光標在&處,此時若執行d%則效果為:
if ( Dflag != TMD ) {
…
}
12)、執行指令
|   Vi執行指令  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   :10,20d  |   刪除第10行至第20行的內容  | 
|   ***  |   :10d  |   刪除第10行的內容  | 
|   ***  |   :%d  |   刪除全部內容  | 
|   ***  |   :10,20co30  |   將第10行至第20行的內容復制到第30行之后  | 
|   ***  |   :10,20mo30  |   將第10行至第20行的內容移動到第30行之后  | 
|   ***  |   :1,$s/old/new  |   將第1行至最后一行中的old替換成new  | 
|   ***  |   :1,$s/^/new  |   將第1行至最后一行的內容前面插入new  | 
|   ***  |   :10  |   將光標移至第10行  | 
|   ***  |   :10,20y  |   拷貝第10行至第20行的內容  | 
|   ***  |   :g/old/s//new  |   在全文檔范圍內查找每行第一次出現的old字符串并替換為new字符串  | 
|   ***  |   :g/old/s//new/g  |   在全文檔范圍內查找所有old字符串并替換為new字符串  | 
|   ***  |   :g/old/d  |   刪除文檔中包含old字符串的行  | 
|   ***  |   :r filename  |   讀入filename文件內容,并粘貼到當前光標下一行  | 
|   ***  |   :e  |   重新載入當前文檔的內容覆蓋當前所有修改,其實就是將所有自上次保存(或者打開)后的所有修改撤銷。  | 
|   ***  |   :$  |   光標移動到文檔末尾一行行首  | 
|   ***  |   :[w]n[!] [filename]  |   切換到下一個文件進行編輯。如果指定了filename則打開指定的filename文件進行編輯,如果filename不存在則默認為創建該新文件。如果沒有指定文件名,則只能在vi已經打開多個文件且當前編輯的文件不是最后一個文件時使用該命令。n表示next,w表示在切換到下一個文件前將當前文件的修改進行保存,!表示強制執行。  | 
|   ***  |   :rew[!]  |   rew即rewind,重新打開第一個文件進行編輯,但是如果當前文件的修改沒有保存的話將失敗,如果使用了!,則將舍棄對當前文檔的最近修改(自上次存儲或者文件打開以來),強行打開第一個文件進行編輯。  | 
|   ***  |   :la[!]  |   la即last,打開最后一個文件進行編輯,類似rew,只不過一個是打開第一個文件,一個是打開最后一個文件。  | 
|   ***  |   :help [key]  |   顯示vi的幫助信息,如果指定了命令,則顯示該命令的幫助信息。用:exit或:q推出幫助界面。  | 
以上用具體的數字為例進行介紹,數字表示行數,光標所在行可用“.”代替,文件最后一行可用“$”代替。
13)、保存與退出
|   Vi保存與退出  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   :w  |   保存,但不退出  | 
|   ***  |   :wq  |   保存并退出  | 
|   :x  |   同:wq  | |
|   ***  |   :q  |   退出,如果當前文件沒有保存,禁止退出  | 
|   ***  |   :q!  |   不保存退出  | 
|   :w file1  |   將內容保存至文件file1中,注意:此時編輯的仍為原文件  | |
|   :w! file1  |   將內容覆蓋保存至文件file1中,如文件file1存在,:w file1將禁止執行  | |
14)、環境設置
|   Vi環境設置  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   :set  |   顯示已設置的環境狀況  | 
|   ***  |   :set all  |   顯示所有的環境設置選項  | 
|   ***  |   :set nu  |   顯示行號  | 
|   ***  |   :set nonu  |   不顯示行號  | 
|   ***  |   :set ts=n  |   設置Tab鍵的長度為n  | 
注:vi環境設置的缺省值可在$HOME/.exrc文件中設置。
15)、重復指令
|   Vi重復指令  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   .  |   重復上一條指令  | 
16)、切換到shell狀態
|   Vi切換到shell狀態  | ||
|   重要度  |   指令  |   功能說明  | 
|   ***  |   :sh  |   切換到shell狀態,此時可以執行所有shell命令,知道執行exit返回文檔編輯狀態。  | 
總結
                            
                        - 上一篇: UNIX文件结构(转自UNIX/AIX操
 - 下一篇: 完美图解教程 Linux环境VNC服务安