歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

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存在兩種模式:指令模式和輸入模式。在指令模式下輸入的按鍵將做為指令來處理:如輸入a,vi即認為是在當前位置插入字符。而在輸入模式下,vi則把輸入的按鍵當作插入的字符來處理。指令模式切換到輸入模式只需鍵入相應的輸入命令即可(如a,A),而要從輸入模式切換到指令模式,則需在輸入模式下鍵入ESC鍵,如果不曉得現在是處於什麽模式,可以多按幾次[ESC],系統如發出哔哔聲就表示已處於指令模式下了。
 
付:在指令模式進入輸入模式的指令:
 
新增(append)
 
a :從光標所在位置後面開始新增資料,光標後的資料隨新增資料向後移動。
 
A:從光標所在列最後面的地方開始新增資料。
 
 
 
插入(insert)
 
i:從光標所在位置前面開始插入資料,光標後的資料隨新增資料向後移動。
 
I :從光標所在列的第一個非空白字元前面開始插入資料。
 
 
 
開始(open)
 
o :在光標所在列下新增一列並進入輸入模式。
 
O: 在光標所在列上方新增一列並進入輸入模式。
 
 
 
(三)、退出vi
 
      在指令模式下鍵入:q,:q!,:wq或:x(注意:號),就會退出vi。其中:wq和:x是存盤退出,而:q是直接退出,如果文件已有新的變化,vi會提示你保存文件而:q命令也會失效,這時你可以用:w命令保存文件後再用:q 退出,或用:wq或:x命令退出,如果你不想保存改變後的文件,你就需要用:q!命令,這個命令將不保存文件而直接退出vi。
 
 
 
 
 
(四)、基本編輯
 
 
 
       配合一般鍵盤上的功能鍵,像是方向鍵、[Insert] 、[Delete] 等等,現在你應該已經可以利用vi 來編輯文件了。當然vi 還提供其他許許多多功能讓文字的處理更為方便。
 
      何謂編輯?一般認為是文字的新增、修改以及刪除,甚至包括文字區塊的搬移、復制等等。先這裡介紹vi 的如何做刪除與修改。(注意:在vi 的原始觀念裡,輸入跟編輯是兩碼子事。編輯是在指令模式下操作的,先利用指令移動光標來定位要進行編輯的地方,然後才下指令做編輯。)
 
 
 
刪除與修改文件的命令:
 
x:刪除光標所在字符。
 
dd :刪除光標所在的列。
 
r :修改光標所在字元,r 後接著要修正的字符。
 
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行之間的內容刪除
 
:w :保存當前文件
 
: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號刪除寄存器中

摘自 chenhn
Copyright © Linux教程網 All Rights Reserved