Vi命令大全

jopen 10年前發布 | 13K 次閱讀 Vi
一、 Unix 編輯器概述
       編輯器是使用計算機的重要工具之一,在各種操作系統中,編輯器都是必不可少的部件。 Unix 及其相似的 ix  操作系統系列中,為方便各種用戶在各個不同的環境中使用,提供了一系列的 ex 編輯器,包括  ex, edit,ed   vi. 其中 ex,edit,ed 都是行編輯器,現在已很少有人使用, Unix 提供他們的原因是考慮到滿足各種用戶特別 是某些終端用戶的需要。 值得慶幸的是, Unix 提供了全屏幕的 Vi 編輯器,這使我們的工作輕松不少。不少 DOS 用戶抱怨 Vi 編輯器不象  DOS 下的編輯器如 edit 那么好用,這是因為 Vi 考慮到各種用戶的需要,沒有使用某些通用的編輯鍵(在各個 不同的終端機上他們的定義是不同的,在某些終端機上甚至沒有這些鍵)。而是采用狀態切換的方法,但這 只是習慣的問題,一旦你熟練的使用上了 vi 你就會覺得它其實也很好用。

      雖然 Vi采用了狀態切換的方法,但電腦的硬件及操作系統多種多樣,某些電腦的鍵盤上沒有特定的幾個功能鍵!那麼不就有某些功能不能用了?這個問題在 Unix 系統上也一樣,幾乎各大電腦廠商都有自己的 Unix 系統,而 vi 的操作方法也會隨之有點出入。這里我們采用 PC 的鍵盤來說明 vi 的操作,但在具體的環境中還要參考相應的資料,這一點是值得注意的。

二、Vi入門

(一)、進入vi 
      在系統提示字符($#)下敲入vi <檔案名稱>vi 可以自動幫你載入所要編輯的文件或是開啟一個新文件(如果該文件不存在或缺少文件名)。進入 vi 后螢幕左方會出現波浪符號,凡是列首有該符號就代表此列目前是空的。

(二)、兩種模式
       如上所述,vi存在兩種模式:指令模式和輸入模式。在指令模式下輸入的按鍵將做為指令來處理:如輸入 avi即認為是在當前位置插入字符。而在輸入模式下,vi則把輸入的按鍵當作插入的字符來處理。指令模式切換到輸入模式只需鍵入相應的輸入命令即可(如a,A),而要從輸入模式切換到指令模式,則需在輸入模式下鍵入ESC鍵,如果不曉得現在是處於什麼模式,可以多按幾次 [ESC],系統如發出嗶嗶聲就表示已處于指令模式下了。
付:在指令模式進入輸入模式的指令:
新增 (append) 
:從光標所在位置後面開始新增資料,光標後的資料隨新增資料向後移動。
A從光標所在列最後面的地方開始新增資料。

插入 (insert) 
i從光標所在位置前面開始插入資料,光標後的資料隨新增資料向後移動。
:從光標所在列的第一個非空白字元前面開始插入資料。

開始 (open) 
:在光標所在列下新增一列并進入輸入模式。
O: 在光標所在列上方新增一列并進入輸入模式。

(三)、退出vi
      在指令模式下鍵入:q,:q!,:wq:x(注意:號),就會退出vi。其中:wq:x是存盤退出,而:q是直接退出,如果文件已有新的變化,vi會提示你保存文件而:q命令也會失效,這時你可以用:w命令保存文件后再用:q 退出,或用:wq:x命令退出,如果你不想保存改變后的文件,你就需要用:q!命令,這個命令將不保存文件而直接退出vi

┌───────────┬───────────────┐ 
│命令         │描述             │ 
├───────────┼───────────────┤ 
│zz          │保存并退出          │ 
├───────────┼───────────────┤ 
│:w filename      │寫入文件            │ 
├───────────┼───────────────┤ 
│:W          │寫入文件           │ 
├───────────┼───────────────┤ 
│:x          │保存(如果當前文件修改過)并退出│ 
├───────────┼───────────────┤ 
│:q!          │不保存文件,直接退出      │ 
├───────────┼───────────────┤ 
│:q          │退出vi            │ 



(四)、基本編輯

        配合一般鍵盤上的功能鍵,像是方向鍵、 [Insert]  [Delete]  等等,現在你應該已經可以利用  vi  來編輯文件了。當然  vi  還提供其他許許多多功能讓文字的處理更為方便。
       何謂編輯?一般認為是文字的新增、修改以及刪除,甚至包括文字區塊的搬移、復制等等。先這里介紹  vi  的如何做刪除與修改。(注意:在  vi  的原始觀念里,輸入跟編輯是兩碼子事。編輯是在指令模式下操作 的,先利用指令移動光標來定位要進行編輯的地方,然後才下指令做編輯。)

刪除與修改文件的命令:
x 刪除光標所在字符。
dd  :刪除光標所在的列。
:修改光標所在字元, 後接著要修正的字符。
R 進入取替換狀態,新增文字會覆蓋原先文字,直到按  [ESC]  回到指令模式下為止。
s 刪除光標所在字元,并進入輸入模式。
S 刪除光標所在的列,并進入輸入模式。

       其實呢,在 PC 上根本沒有這麼麻煩!輸入跟編輯都可以在輸入模式下完成。例如要刪除字元,直接按  [Delete]  不就得了。而插入狀態與取代狀態可以直接用  [Insert]  切換,犯不著用什麼指令模式的編 輯指令。不過就如前面所提到的,這些指令幾乎是每臺終端機都能用,而不是僅僅在  PC  上。 在指令模式下移動光標的基本指令是  h, j, k, l  。想來各位現在也應該能猜到只要直接用  PC  的方向鍵就可以了,而且無論在指令模式或輸入模式下都可以。多容易不是。當然  PC  鍵盤也有不足之處。有個很好用的指令  u  可以恢復被刪除的文字,而  U  指令則可以恢復光標所在列的所有改變。這與某些電腦上的  [Undo]  按鍵功能相同。

三、附件: vi 詳細指令表

進入 vi 的命令


vi filename:  打開或新建文件,并將光標置于第一行首  
vi +n filename: 
打開文件,并將光標置于第 n 行首  
vi + filename: 
打開文件,并將光標置于最后一行首  
vi +/pattern filename: 
打開文件,并將光標置于第一個與 pattern 匹配的串處  
vi -r filename: 
在上次正用 vi 編輯時發生系統崩潰,恢復 filename 
vi filename....filename: 
打開多個文件,依次進行編輯  

移動光標類命令
h: 
光標左移一個字符  
l: 
光標右移一個字符  
space: 
光標右移一個字符  
Backspace: 
光標左移一個字符  
k
Ctrl+p:  光標上移一行  
j
Ctrl+n:  光標下移一行  
Enter: 
光標下移一行  
w
W :  光標右移一個字至字首  
b
B :  光標左移一個字至字首  
e
E :  光標右移一個字至字尾  
): 
光標移至句尾  
 (: 
光標移至句首  
}: 
光標移至段落開頭  
{: 
光標移至段落結尾  
nG: 
光標移至第 n 行首  
n+: 
光標下移 n  
n-: 
光標上移 n  
n$: 
光標移至第 n 行尾  
H: 
光標移至屏幕頂行  
M: 
光標移至屏幕中間行  
L: 
光標移至屏幕最后行  
0: 
光標移至當前行首  
$: 
光標移至當前行尾  

屏幕翻滾類命令
Ctrl+u: 
向文件首翻半屏  
Ctrl+d: 
向文件尾翻半屏  
Ctrl+f: 
向文件尾翻一屏  
Ctrl
b:  向文件首翻一屏  
nz: 
將第 n 行滾至屏幕頂部,不指定 n 時將當前行滾至屏幕頂部。  

插入文本類命令
i: 
在光標前  
I: 
在當前行首  
a: 
光標后  
A: 
在當前行尾  
o: 
在當前行之下新開一行  
O: 
在當前行之上新開一行  
r: 
替換當前字符  
R: 
替換當前字符及其后的字符,直至按 ESC  
s: 
從當前光標位置處開始,以輸入的文本替代指定數目的字符  
S: 
刪除指定數目的行,并以所輸入文本代替之  
ncw
nCW:  修改指定數目的字  
nCC: 
修改指定數目的行  

刪除命令
ndw ndW:  刪除光標處開始及其后的 n-1 個字  
do: 
刪至行首  
d$: 
刪至行尾  
ndd: 
刪除當前行及其后 n-1  
x
X:  刪除一個字符, x 刪除光標后的,而 X 刪除光標前的  
Ctrl+u: 
刪除輸入方式下所輸入的文本  

搜索及替換命令
/pattern: 
從光標開始處向文件尾搜索 pattern
?pattern: 
從光標開始處向文件首搜索 pattern
n: 
在同一方向重復上一次搜索命令
N: 
在反方向上重復上一次搜索命令
:s/p1/p2/g: 
將當前行中所有 p1 均用 p2 替代
:n1,n2s/p1/p2/g: 
將第 n1 n2 行中所有 p1 均用 p2 替代
:g/p1/s//p2/g: 
將文件中所有 p1 均用 p2 替換


選項設置
all
:列出所有選項設置情況
term
:設置終端類型
ignorance
:在搜索中忽略大小寫
list
:顯示制表位 (ctrl+i) 和行尾標志( $)
number
:顯示行號
report
:顯示由面向行的命令修改過的數目
terse
:顯示簡短的警告信息
warn
:在轉到別的文件時若沒保存當前文件則顯示 no write 信息
nomagic
:允許在搜索模式中,使用前面不帶 “/” 的特殊字符
nowrapscan
:禁止 vi 在搜索到達文件兩端時,又從另一端開始
mesg
:允許 vi 顯示其他用戶用 write 寫到自己終端上的信息

最后行方式命令
n1,n2 co n3 :將 n1 行到 n2 行之間的內容拷貝到第 n3 行下
n1,n2 m n3 :將 n1 行到 n2 行之間的內容移至到第 n3 行下
n1,n2 d  :將 n1 行到 n2 行之間的內容刪除
:保存當前文件
e filename :打開文件 filename 進行編輯
x :保存當前文件并退出
q :退出 vi
q! :不保存文件并退出 vi
!command :執行 shell 命令 command
n1,n2 w!command :將文件中 n1 行至 n2 行的內容作為 command 的輸入并執行之,若不指定 n1 n2 ,則表示將整個文件內容作為 command 的輸入
r!command :將命令 command 的輸出結果放到當前行
寄存器操作
"?nyy :將當前行及其下 n 行的內容保存到寄存器?中,其中 ? 為一個字母, n 為一個數字
"?nyw :將當前行及其下 n 個字保存到寄存器?中,其中 ? 為一個字母, n 為一個數字
"?nyl :將當前行及其下 n 個字符保存到寄存器?中,其中 ? 為一個字母, n 為一個數字
"?p :取出寄存器?中的內容并將其放到光標位置處。這里?可以是一個字母,也可以是一個數字
ndd :將當前行及其下共 n 行文本刪除,并將所刪內容放到 1 號刪除寄存器中。 
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!