Posted on 2008-10-08 08:37
S.l.e!ep.¢% 閱讀(183)
評論(0) 編輯 收藏 引用 所屬分類:
Unix
vi(Visual) 是以視覺為導(dǎo)向的全屏幕編輯器、共分為三種方式(mode):
command 方式:
任何輸入都會作為編輯命令,而不會出現(xiàn)在屏幕上,若輸入錯誤則有“岬”的聲音;任何輸入
都引起立即反映
insert 方式:
任何輸入的數(shù)據(jù)都置于編輯寄存器。在 command 方式下輸入( I,a,A 等) , 可進入 insert 方式, insert 方式下按 ESC ,可跳回 command 方式。
escape 方式:
以“:”或者“ / ”為前導(dǎo)的指令,出現(xiàn)在屏幕的最下一行,任何輸入都被當(dāng)成特別指令。
進入 vi (在系統(tǒng)提示符下面輸入以下指令) :
vi 進入 vi 而不讀入任何文件
vi filename 進入 vi 并讀入指定名稱的文件(新、舊文件均可)。
vi +n filename 進入 vi 并且由文件的第幾行開始。
vi +filename 進入 vi 并且由文件的最后一行開始。
vi + /word filename 進入 vi 并且由文件的 word 這個字開始。
vi filename(s) 進入 vi 并且將各指定文件列入名單內(nèi),第一個文件先讀入。
vedit 進入 vi 并且在輸入方式時會在狀態(tài)行顯示“ INSERT MODE ”。
編輯數(shù)個文件(利用 vi filename(s)) 進入 vi 后)
:args 顯示編輯名單中的各個文件名
:n 讀入編輯名單中的下一個文件
:rew 讀入編輯名單中的第一個文件
:e# 讀入編輯名單內(nèi)的前一個文件
:e file 讀入另一個文件進 vi( 此文件可不在編輯名單內(nèi)) , 若原文件經(jīng)修改還沒有存檔,則 應(yīng)先以 : w 存檔。
:e! file 強迫讀入另一個文件進入 vi ,原文件不作存檔動作。
存儲及退出 vi
:w filename 存入指定文件,但未退出 vi (若未指定文件名則為當(dāng)前工作的文件名)。
:wq 或者 :x 或者 zz 存文件,并且退出 vi.
:q 不作任何修改并退出 vi 。
:q! 放棄任何修改并退出 vi 。
:!command 暫時退出 vi 并執(zhí)行 shell 指令,執(zhí)行完畢后再回到 vi 。
:sh 暫時退出 vi 到系統(tǒng)下,結(jié)束時按 Ctrl + d 則回到 vi 。
加數(shù)據(jù)指令
i 在關(guān)標(biāo)位置開始插入字符,結(jié)束時候按 ESC 鍵。
I 在光標(biāo)所在行的最前面開始加字,結(jié)束時按 ESC 鍵。
a 在光標(biāo)位置后開始加字,結(jié)束時按 ESC 鍵。
A 在光標(biāo)所在行的最后面開始加字,結(jié)束時按 ESC 鍵。
o 在光標(biāo)下加一空白行并開始加字,結(jié)束時按 ESC 鍵。
O 在光標(biāo)上加一空白行并開始加字,結(jié)束時按 ESC 鍵。
!command 執(zhí)行 shell 指令,并把結(jié)果加在光標(biāo)所在行的下一行。
刪除指令
nx 刪除由光標(biāo)位置起始的 n 個字符(含光標(biāo)位置,按一個 x 表示刪除光標(biāo)所在的字符)
nX 刪除由光標(biāo)位置起始的 n 個字符(不含光標(biāo)位置)。
ndw 刪除光標(biāo)位置其實的 n 個字符組( word) 。
d0 將行的開始到光標(biāo)位置的字符全部刪除。
d$ 或 D 將光標(biāo)位置起始到行尾的字符全部刪除。
ndd 將光標(biāo)位置起始的 n 行(整行)刪除( dd 表示刪除光標(biāo)所在行)。
:x,.d??????????????????????????????????從x行刪除到當(dāng)前行;
:.,xd??????????????????????????????????從當(dāng)前行刪除到x行;
:x,.+3d???????????????????????????? 從x行刪除到當(dāng)前行后第三行;
:x,.-1d????????????????????????????? 從x行刪除到當(dāng)前行前一行。
:x,yd???????????????????????????????? 刪除第x行到第y行
關(guān)標(biāo)移動
0 移到一行的開始
$ 移到一行的最后
[ 移到文件開始位置
] 移到文件結(jié)束位置
nh 往左移 n 位
nl 或者 spacebar 往右移 n 位
nk 向上移 n 行
n+ 向上移 n 行,光標(biāo)在該行的起始
ni 向下移 n 行
n- 向下移 n 行,光標(biāo)在該行的起始
H 移到屏幕的左上角
M 移到屏幕的中間行開頭
L 移到屏幕的最后一行
G 移到文件的最后一行
nG 或者 :n 移到文件的第 n 行
nw 右移 n 個字組,標(biāo)點符號屬于字組
nW 右移 n 個字組,標(biāo)點符號不屬于字組
nb 左移 n 個字組,標(biāo)點符號屬于字組
nB 左移 n 個字組,標(biāo)點符號不屬于字組
Ctrl + u 屏幕上卷半個菜單
Ctrl + d 屏幕下卷半個菜單
Ctrl + b 屏幕上卷一個菜單
Ctrl + F 屏幕下卷一個菜單
修改指令
r 修改光標(biāo)文件的字符
R 從光標(biāo)位置開始修改,結(jié)束時按 ESC 鍵
new 更改 n 組字符,結(jié)束時按 ESC 鍵
ncc 從光標(biāo)所在位置開始更改 n 行,結(jié)束時按 ESC 鍵
重排各行長度
i 并按 Enter 將該行由光標(biāo)所在處斷開,并進入 insert 方式
J 把下一行的數(shù)據(jù)連接到本行之后
尋找指令
/text 從光標(biāo)位置往下找字串 text
?text 從光標(biāo)位置往上找字串 text
n 繼續(xù)找下一個字串(在輸入上面的尋找指令之后使用)
尋找并且取代指令
:getxt1/s/ /text2/options 將各行的 text1 替換為 text2
? option=g 表示文件中所有的 text1 均被取代,若未輸入任何 option, 則只有 ????????????????????????????????? 各行中的第一個出現(xiàn)的 text1 被取代
option=go 在屏幕顯示各取代的行
option=gc 在每個字串取代之前要求確認(rèn)
Start,endgtext1/s/ / text2/options 同上,只尋找并取代第 start~end 行。
或 :Start,ends/text1/text2/options
復(fù)制及移動文件
:first,last co dest 將 first 到 last 行的數(shù)據(jù)復(fù)制到目標(biāo)行 (dest )下面
:Start,end m dest 將 start 到 end 行的數(shù)據(jù)移動到目標(biāo)行( dest) 下。
:r filename 將指定文件的內(nèi)容讀入光標(biāo)所在行下。
nY 將光標(biāo)所在位置開始的 n 行數(shù)據(jù)暫存
p 復(fù)制暫存數(shù)據(jù)在光標(biāo)的下一行
P 復(fù)制暫存數(shù)據(jù)在光標(biāo)的上一行
其他命令
?重復(fù)前一指令 ? u
取消前一指令 ? Ctrl + l
刷新屏幕顯示 ? :set number
顯示文件的行號,但不會存文件 ? :set nonumber
解除行號顯示 ? :set ai
設(shè)置每行起始位置(以光標(biāo)當(dāng)前位置為起始)? :set noai
?取消行起始位置設(shè)定 ? :f 或 <Ctrl> + g 告訴用戶有關(guān)現(xiàn)行編輯文件的數(shù)據(jù)。