精通vi命令
如何啟動vi命令呢?
當(dāng)你在圖形模式時,你得先打開終端,然后在shell提示符下輸入vi,就可以了。
當(dāng)然你也可以指定一個文件名;如:
$vi script.txt
表示在當(dāng)前目錄下創(chuàng)建了一個空文本文件script.txt
你也可以提供一個或更多個文件。(如果所提供的文件名不存在,則創(chuàng)建)
例如:
$vi file.txt1 file.txt2
現(xiàn)在讓我們來了解如何退出vi,以及保存在vi中所做的修改和如何得到幫助信息。
退出vi有如下的命令格式:
:n 當(dāng)你指定了多個文件時,使用這個命令來編輯下一個文件。
:q 不保存文件退出.
:q! 不保存文件,并強(qiáng)制退出.
:wq file 保存文件并退出,這里的file代表相對路徑的文件名,或者是絕對路徑的文件名。
:w file 保存文件,如果沒有指定文件名,就是當(dāng)前的文件名。
:w! 強(qiáng)制保存文件(前提是你對這個文件具有寫的權(quán)限)。
:x 保存文件并退出,等價于ZZ命令。
ZZ 保存文件并退出。
zz 以當(dāng)前鼠標(biāo)位置為準(zhǔn),向前滾動半屏。
:h 請求幫助
讓我們來看看幾個最基本的例子
假如你想新建一個文件名為script.txt,路徑為當(dāng)前目錄??梢栽趕hell模式下,輸入如下:
$vi script.txt
現(xiàn)在你就進(jìn)入了vi命令,現(xiàn)在你就可以用上面的退出命令退出了。
上面的命令只告訴我們?nèi)绾瓮顺鰒i,和保存文件,我們還不知如何對文件進(jìn)行編輯和修改?;镜拿钊缦拢?br> 插入命令:
想插入新的內(nèi)容,得先導(dǎo)航到插入的位置,然后進(jìn)入修改模式:
i 在當(dāng)前鼠樣之前進(jìn)入插入模式,并替換文本。
I 在行的開始處進(jìn)入插入模式
a 在當(dāng)前鼠標(biāo)之后進(jìn)入插入模式,添加或替換文本。
A 在當(dāng)前行的末尾進(jìn)入插入模式。
o 在當(dāng)前行的下面插入一個新行
O 在當(dāng)前行的上面插入一個新行。
J 將下一行與當(dāng)前行合并成一行
:e file 編輯指定的文件,并退出當(dāng)前的文件。(file 表示路徑加文件名)
:e! 重新讀取當(dāng)前文件,并放棄所做的修改。
:r filename 在當(dāng)前行處插入一個新的文件
編輯命令
C 刪除從當(dāng)前光標(biāo)到行尾,并進(jìn)入插入模式。
cc 刪除整行,并進(jìn)入插入模式。
S 刪除整行,并進(jìn)入插入模式。
s 刪除當(dāng)前光標(biāo)處的字符,并進(jìn)入插入模式
cw 在當(dāng)前光標(biāo)處刪除一個單詞,并進(jìn)入插入模式。
R 進(jìn)入插入模式(一種不同的插入模式),并覆蓋已存在的字符。
u 撤消上一次的操作
刪除命令
從指定的位置刪除一個文本塊
dl 刪除當(dāng)前光標(biāo)處的字符
ndl 刪除當(dāng)前光標(biāo)處的n個字符(向前計(jì)算)
如:3dl 將要刪除3個字符
dw 刪除當(dāng)前光標(biāo)處的單詞
ndw 刪除當(dāng)前光標(biāo)處的n個單詞(向前計(jì)算)
如:5dw 將要刪除5個單詞
dG 刪除從當(dāng)前光標(biāo)到文件的末尾
dd or :d 刪除當(dāng)前行
ndd 從當(dāng)前行開始,向前刪除n行,
如:3dd 將要刪除3行
D 刪除從當(dāng)前光標(biāo)到行末,等價于d$
d) 除了擁有D和d$的功能外,還有下面描述的功能:
把鼠標(biāo)放在{,[ 或者(上,將要刪除所有與之匹配的內(nèi)容
如:prints()
{ if [ -f $1 ]
then
ehco "the \$1 is a file"
fi
}
當(dāng)光標(biāo)在{上時,按下d),就可刪除{}之間的所有內(nèi)容(假如你是在插入模式下,得先按 下‘esc’鍵,再將光標(biāo)定位在{上,就可以了)
x 刪除當(dāng)前光標(biāo)處的字符,相當(dāng)于dl命令
X 刪除當(dāng)前光標(biāo)左邊處的字符
:X 對文件加密(即給文件設(shè)置密碼保護(hù))
nx 刪除n個字符從當(dāng)前光標(biāo)處。
例如:3x 將從當(dāng)前光標(biāo)處向前刪除3個字符
復(fù)制與粘貼
復(fù)制命令,通常是從一個指定的位置,復(fù)制一個文本塊,以下是具體的命令:
yl 向前復(fù)制一個字符(這里的字母順序不能顛倒)
yw 向前復(fù)制一個單詞(這里的字母順序不能顛倒)
y$ 從當(dāng)位置復(fù)制到行尾(這里的字母順序不能顛倒)
yG 從當(dāng)位置復(fù)制到文件的尾部(這里的字母順序不能顛倒)
yy or :y 復(fù)制整行
nyy 從當(dāng)前行開始,向前復(fù)制n行。(這里的字母順序不能顛倒)
如:3yy 從當(dāng)前行開始向前復(fù)制3行
粘貼操作是插入先前剪切板中的內(nèi)容
p(小寫) 在當(dāng)前光標(biāo)的后面粘貼剪切板中的內(nèi)容
P(大寫) 在當(dāng)前光標(biāo)的前面粘貼剪切板中的內(nèi)容
np 粘貼n次,p可以是大寫,也可以是小寫
如3p 在當(dāng)前光標(biāo)的后面連續(xù)粘貼3次相同的內(nèi)容
上面講了vi的進(jìn)入,退出及編輯命令,在vi中,是不能用鼠標(biāo)的,因此,我們還得來學(xué)一些導(dǎo)航命令,以讓我們可以將光標(biāo)定位在我們感興趣的位置上。
Ctrl-b 向上滾動一屏
Ctrl-f 向下滾動一屏
0(zero) 移動當(dāng)前行的開始
$ 移動當(dāng)前行的末尾
^ 移動到當(dāng)前行第一個非空白字符處
$ 移動到當(dāng)前行的末尾
b,B 向后滾動一個單詞,以空白作為分隔符
G 移動到文件的尾部(相當(dāng)于Shift-g)
nG or :n 從當(dāng)前文件的開始行向前移動n行,
如:1 Shift-g 將光標(biāo)定位在當(dāng)前文件的第一行
h 向左移動一個字符
H 移動到屏幕的頂部
j 向下移動一行
k 向上移動一行
l 向右移動一個字符
L 移動到屏幕的底部
M 移動到屏幕的中間
w,W 向前移動一個單詞,光標(biāo)在單詞的開始處;白作為分隔符。
e,E 向前移動一個單詞,光標(biāo)在單詞的末尾處;白作為分隔符。
{ 向后移動一段
} 向前移動一段
( 向后移動一句話
) 向前移動一句話
范圍
當(dāng)用:s命令去查找并替換多行時,常需要指定其范圍,如::3,7表示從第三行到第七行,以下是一些常用的范圍格式:
:n ,m 從第n行到第m行
:. 當(dāng)前行
:$ 最后的一行
:?c Marker c
:% 所有的行
.,$ 從當(dāng)前位置到結(jié)尾
:g/pattern/ 所有匹配的行
% 這是一個特殊用途的命令。將光標(biāo)放在 [, {, (上,然后按下‘%‘,光標(biāo)就會自動跳到匹配的字符],},)上,并高亮顯示(一般用在調(diào)試程序中)。
例如:
刪除第三到第七行的內(nèi)容:
:3,7d
給文件的所有行加上注釋
:%s/^/#/
將文件的所有行取消注釋
:%s/^#//
查找
這下面的命令是用來查找文本的:
/pattern 向前查找字符串,也可用正則表達(dá)式
pattern 向后查找字符串,也可用正則表達(dá)式
n 重做上次的查找操作(從當(dāng)前光標(biāo)向下查找匹配的位置)
N 重做上次的查找操作在相反的方向(從當(dāng)前光標(biāo)向上查找匹配的位置)
例如:
查找以字母a開頭,后面為兩個任意字符的單詞
/a.. or ?a..
替換
:s/pattern/string/flags 用 string替換pattern
:s是完成查找和替換的標(biāo)志
常用的flags(可選)有g(shù)和c
g 是一個全局參數(shù),表示所有,或者是全部
c 只做一次,在替換之前并給出提示
& 重做上一次的查找替換操作(須用一些導(dǎo)航命令將光標(biāo)定位在需要替換的字符處)
例如:
用script替換scrit,從第一行到文件的結(jié)尾:
:1,$ s/scrit/script/g
這參數(shù)g表示在指定范圍內(nèi)替換全部,如果沒有給定參數(shù)g,則只替換一次。
查找aple并將它替換為apple; 查找范圍:當(dāng)前光標(biāo)到文件的末尾
:.,$s/aple/apple/g (在$與s之間,有無空格都是正確的)
在文件中查找并替換有以下兩種方法:
:%s/from/to/g
:g/from/s//to/g
說明:from是被替換的字符,to是用來替換的字符
正則表達(dá)式:
. (點(diǎn)) 任意單個字符,除了新行
* 匹配 0次或多次
[...] 匹配括號里的任意一個字符
[^ ...] 不匹配括號里的任意一個字符
^ 開始標(biāo)志
$ 結(jié)束標(biāo)志
\< , \> 前一個表示單詞的開始,后一個表示單詞的結(jié)束
\(: : :\) 分組(放進(jìn)內(nèi)存)
\n n組的內(nèi)容(從內(nèi)存里調(diào)用)
如:查找以字母a或A開頭,第二個字符任意,三個字符為c的單詞
/[aA].c/
文件
!!program 程序運(yùn)行的結(jié)果來替換當(dāng)前行的內(nèi)容
:r!command 從shell命令里讀取輸出值。
如::r!which perl
其它命令
Ctrl-] 打開超鏈接
Ctrl-T 返回到打開超鏈接之前的文本
:se nu 在各行的前面顯示行數(shù)
:se nonu 撤消顯示行數(shù)
. 重做上一次文本改變的命令。假如你剛做過粘貼操作,按下‘.’,將繼續(xù)做粘貼操作
u 撤消上一次的操作;假如你上次做了粘貼操作,這個命令將會撤消上次的粘貼操作
U 撤消在一行中所做的所有更改。(這個命令的作用范圍在一行)
ctrl-l 刷新窗口
以下是一個非常有趣的命令,有時你想把你輸入的內(nèi)容,原封不動的復(fù)制n遍,而你不想用上面的關(guān)于復(fù)制,粘貼的命令。以下的操作將會在你輸入完內(nèi)容后,自動重復(fù)n次你先前做的內(nèi)容:
假如你想把你即將要輸入的內(nèi)容,自動重復(fù)3遍:
第一步:輸入 ‘3i‘(’i’表示進(jìn)入插入模式)
第二步:輸入你想輸入的內(nèi)容
(假定為以下內(nèi)容:
#awk '$3<5 {printf "%s\t%s\n",$1,$2;} $3>6 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
#note: don't appent the $ after the regular expression)
第三步:按下<ESC>鍵,得到的結(jié)果如下:
#awk '$3<5 {printf "%s\t%s\n",$1,$2;} $3>6 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
#note: don't appent the $ after the regular expression)#awk '$3<5 {printf
"%s\t%s\n",$1,$2;} $3>6 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
#note: don't appent the $ after the regular expression)#awk '$3<5 {printf
"%s\t%s\n",$1,$2;} $3>6 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
#note: don't appent the $ after the regular expression)
當(dāng)然,你也可以將i 改為o或a
做完了上面的命令,是不是感到對vi命令已經(jīng)有了一個清楚的認(rèn)識了;也許你會想,既然不能用鼠標(biāo),那能不能像鼠標(biāo)一樣,通過按下鼠標(biāo)左鍵,就可選定想選定的內(nèi)容呢,答案是肯定的。現(xiàn)在讓我們來看看如何做到:
假如你想選定一行中的某一部分,并將它復(fù)制,然后粘貼到你想粘貼的位置:
第一步:將光標(biāo)定位在你想選定的那個位置(通過前面講的導(dǎo)航命令)
第二步:按下<ctrl-v>組合鍵
第三步:按方向鍵,調(diào)整并選取所需內(nèi)容,選中的內(nèi)容將會以另一種顏色出現(xiàn),確定選中的內(nèi)容后,按下'y',就完成了復(fù)制操作。
第四步:將光標(biāo)定位在你想粘貼的位置,按下p鍵即可
提示:當(dāng)你進(jìn)入插入模式后,你又想對某一句話,或單詞進(jìn)行復(fù)制,你必須先按下<ESC>鍵,才能進(jìn)入復(fù)制操作的命令;總之:你在插入模式下,想用其它的命令,你都得先按下<ESC>鍵。
------------------------------------------------------------------------------------------------------------------------------------------
一、簡介
Vi命令可以說是Unix/Linux世界里最常用的編輯文件的命令了,很多人不喜歡VI因?yàn)樗?的眾多的命令集,但是我們只需要掌握基本的命令然后靈活地加以運(yùn)用,相信我們也
一樣會喜歡它的。 本文旨在更有條理有歸納性地介紹VI的一些最常用命令和一些高級的應(yīng)用。
二、基本命令介紹
1) 光標(biāo)命令
k,j,h,l——上下左右光標(biāo)移動命令,雖然你可以在Linux中使用鍵盤右邊的四個光標(biāo)鍵, 但是記住這四個命令還有非常有用的,也就是右手在鍵盤上放置的位置部分。
nG ——n為行數(shù),該命令立即使光標(biāo)跳到指定行。
Ctrl+G——光標(biāo)所在位置的行數(shù)和列數(shù)報(bào)告。
w,b——使光標(biāo)向前或向后跳過一個單詞。
2) 編輯命令
i,a,r——在光標(biāo)的前,后,上方插入字符命令(i=insert,a=append,r=replace)。
cw,dw——改變(置換)/刪除光標(biāo)所在處的單詞的命令 (c=change,d=delete)。
x,d$,dd——刪除一個字符,光標(biāo)所在處到行尾的所有字符,和整行的命令。
3) 查找命令
/string, ?string——從光標(biāo)所在處向后/向前查找相應(yīng)的字符串的命令。
4)拷貝復(fù)制命令
yy,p ——拷貝一行到剪貼板/取出剪貼板中內(nèi)容的命令。
三、常見問題及應(yīng)用技巧
1) 在一個新文件中讀/etc/passwd中的內(nèi)容,取出用戶名部分
vi file
:r /etc/passwd 在打開的文件file中光標(biāo)所在處讀入/etc/passwd。
:%s/:.*//g 刪除/etc/passwd中用戶名后面的從冒號開始直到行尾的所有部分。
:3r /etc/passwd 這是在指定的行號后面讀入文件內(nèi)容。
另外一種方法刪掉文件中所有的空行及以#開始的注釋行
#cat squid.conf.default | grep -v '^$' | grep -v '^#'
2) 在打開一個文件編輯后才知道登錄的用戶對該文件沒有寫權(quán),不能存盤。
vi file
:w /tmp/1 既然沒法存盤,不想放棄所做的所有修改,先臨時存到/tmp/1。
:20,59w /tmp/1 或者僅僅把第20到59行之間的內(nèi)容存盤成文件/tmp/1。
3) 用VI編輯一個文件,但需要刪除大段大段的內(nèi)容。
vi file
Ctrl+G 把光標(biāo)移到需要刪除的行的處按ctrl+G顯示行號,再到結(jié)尾處再按Ctrl+G.
:23,1045d 假定兩次行號為23和1045,則把這幾間的內(nèi)容全刪除。 也可以在開始和結(jié)束兩行中用ma,mb命令標(biāo)記后用:'a,'bd刪除.
4) 在整個文件或某幾行中在行首或行尾加一些字符串
vi file
:3,$s/^/some string /
在文件的第一行至最后一行的行首前插入some string.
:%s/$/ some string/g 在整個文件每一行的行尾添加 some string.
:%s/string1/string2/g 在整個文件中替換string1成string2.
:3,7s/string1/string2/ 僅替換文件中的第三到七行中的string1成string2.
Note: s為substitute,%表示所有行,g表示global.
5) 同時編輯兩個文件,在兩個文件中拷貝剪貼文本
vi file1 file2
yy 同時打開兩個文件,在文件1的光標(biāo)所在處拷貝所在行。
:n 切換到文件2 (n=next)。
p 在文件2的光標(biāo)所在處粘貼所拷貝的行。
:N 切換回文件1。
6) 替換文件中的路徑
:%s#/usr/bin#/bin#g 把文件中所有路徑/usr/bin換成/bin。
-------------------------------------------------------------------------------------------------------------------------------------------
vi編輯器使用方法|vi熱鍵|vi快捷鍵
vi是在工作站上廣泛使用的編輯軟件。對初學(xué)者而言,
常因其特殊的使用方法,而不得其門而入;對已經(jīng)在使用 vi 的使用者來說,也
常見因?qū)?vi 的不熟悉或不夠了解,而無法發(fā)揮出 vi 強(qiáng)大的編輯能力,以下將
簡單介紹 vi 的使用方法。不必死記硬背,多實(shí)際操作幾次就能記住常用的命令。
進(jìn)入vi
直接執(zhí)行 vi編輯程序即可:
%vi test
此刻屏幕上會出現(xiàn) vi 的編輯屏幕,同時 vi 會將文件復(fù)制一份至內(nèi)存中的緩沖區(qū) (buffer) 。 vi會保留在硬盤中的文件不變,而先對緩沖區(qū)的文件作編輯,編輯完成后,使用者可決定是否要取代原來舊有的文件。
離開vi
若在輸入模式下,則先利用《ESC》進(jìn)入指令模式,而后即可選用下列指令
離開vi。
:q! 離開vi,并放棄剛在緩沖區(qū)內(nèi)編輯的內(nèi)容。
:wq 將緩沖區(qū)內(nèi)的資料寫入硬盤中,并離開vi。
:ZZ 同wq。
:x 同wq。
:w 將緩沖區(qū)內(nèi)的資料寫入硬盤中,但并不離開vi。
:q 離開vi,若文件被修改過,則會被要求確認(rèn)是否放棄修改的內(nèi)容。
此指令可與:w 配合使用。
vi 的操作模式
vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)
。當(dāng)使用者進(jìn)入 vi 后,即處在指令模式下,此刻鍵入的任何字符都被視為
指令。在此模式下可進(jìn)行刪除、修改等動作。若要輸入資料,則需進(jìn)入輸入
模式。
輸入模式
如何進(jìn)入輸入模式
a (append) 由光標(biāo)之后加入資料。
A 由該行之末加入資料。
i (insert) 由光標(biāo)之前加入資料。
I 由該行之首加入資料。
o (open) 新增一行于該行之下以供輸入資料。
O 新增一行于該行之上以供輸入資料。
如何離開輸入模式
《ESC》 結(jié)束輸入模式。
指令模式
光標(biāo)的移動
h 向左移一個字符。
j 向上移一個字符。
k 向下移一個字符。
l 向右移一個字符。
0 移至該行之首
$ 移至該行之末。
^ 移至該行的第一個字符處。
H 移至屏幕的第一列。
M 移至屏幕的中間那列。
L 移至屏幕的最后一列。
G 移至該文件的最后一列。
+ 移至下一列的第一個字符處。
- 移至上一列的第一個字符處。
( 移至該句之首。 (注一)
) 移至該句之末。
{ 移至該段落之首。 (注二)
} 移至該段落之末。
nG 移至該文件的第 n 列。
n+ 移至光標(biāo)所在位置之后的第 n 列。
n- 移至光標(biāo)所在位置之前的第 n 列。
<Ctrl><g> 會顯示該行的行號、文件名稱、文件中最末行的行號、光標(biāo)
所在行號占總行號的百分比。
注一:句子(sentence)在vi中是指以『!』、『.』或『?』結(jié)束的一串字。
注二:段落(paragraph)在vi中是指以空白行隔開的文字。
屏幕的移動
<Ctrl><f> 屏幕往下卷一頁。
<Ctrl> 屏幕往上卷一頁。
<Ctrl><d> 屏幕往下卷半頁。
<Ctrl> 屏幕往上卷半頁。
<Ctrl><e> 屏幕往下卷一行。
<Ctrl><y> 屏幕往上卷一行。
刪除、復(fù)制及修改指令介紹 (此單元較少使用)
d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
Operator + Scope = command
(運(yùn)算子) (范圍)
運(yùn)算子:
d 刪除指令。刪除資料,但會將刪除資料復(fù)制到內(nèi)存緩沖區(qū)。
y 將資料(字組、行列、句子或段落)復(fù)制到緩沖區(qū)。
p 放置(put)指令,與 d 和 y 配和使用??蓪⒆詈骴elete或yank的資
料放置于光標(biāo)所在位置的行列下。
c 修改(change)指令,類似delete與insert的組合。刪除一個詞組、句
子等的資料,并插入新輸入的資料。
范圍:
e 由光標(biāo)所在位置至該字符串的最后一個字符。
w 由光標(biāo)所在位置至下一個字符串的第一個字符。
b 由光標(biāo)所在位置至前一個字符串的第一個字符。
$ 由光標(biāo)所在位置至該行的最后一個字符。
0 由光標(biāo)所在位置至該行的第一個字符。
) 由光標(biāo)所在位置至下一個句子的第一個字符。
( 由光標(biāo)所在位置至該句子的第一個字符。
{ 由光標(biāo)所在位置至該段落的最后一個字符。
} 由光標(biāo)所在位置至該段落的第一個字符。
整行動作
dd 刪除整行。
D 以行為單位,刪除光標(biāo)后的所有字符。
cc 修改整行的內(nèi)容。
yy yank整行,使光標(biāo)所在該行復(fù)制到內(nèi)存緩沖區(qū)。
刪除與修改
x 刪除光標(biāo)所在該字符。
X 刪除光標(biāo)所在之前一字符。
dd 刪除光標(biāo)所在該行。
r 用接于此指令之后的字符取代(replace)光標(biāo)所在字符。
如: ra 將光標(biāo)所在字符以 a 取代之。
R 進(jìn)入取代狀態(tài),直到《ESC》為止。
s 刪除光標(biāo)所在的字符,并進(jìn)入輸入模式直到《ESC》。
S 刪除光標(biāo)所在的該行資料,并進(jìn)入輸入模式直到《ESC》。
移動與復(fù)制
利用 delete 及 put 指令可完成資料移動的目的。
利用 yank 及 put 指令可完成資料復(fù)制的目的。
yank 和 delete 可將指定的資料復(fù)制到內(nèi)存緩沖區(qū),而通過 put 指令
可將緩沖區(qū)內(nèi)的資料復(fù)制到屏幕上。
例:
移動一行 .在該行執(zhí)行 dd
.光標(biāo)移至目的地
.執(zhí)行 p
復(fù)制一行 .在該行執(zhí)行 yy
.光標(biāo)移至目的地
.執(zhí)行 p
指令重復(fù)
在指令模式中,可在指令前面加入一數(shù)字 n,則此指令動作會重復(fù)執(zhí)行 n
次。
例:
刪除10行 .10dd
復(fù)制10行 .10yy
.光標(biāo)移至目的地
.p
指標(biāo)往下移10行 .10j
取消前一動作(Undo)
即復(fù)原執(zhí)行上一指令前的內(nèi)容。
u 恢復(fù)最后一個指令之前的結(jié)果。
U 恢復(fù)光標(biāo)該行的所有改變。
查找
在vi中可查找某一字符串,使光標(biāo)移至該處。
/字符串 往光標(biāo)之后尋找該字符串。
字符串 往光標(biāo)之前尋找該字符串。
n 往下繼續(xù)尋找下一個相同的字符串。
N 往上繼續(xù)尋找下一個相同的字符串。
資料的連接
J 句子的連接。將光標(biāo)所在的下一行連接至光標(biāo)該行的后面。
若某行資料太長亦可將其分成兩行,只要將光標(biāo)移至分開點(diǎn),進(jìn)入輸入模式
(可利用 a、i等指令)再按《Enter》即可。
環(huán)境的設(shè)定
:set nu 設(shè)定資料的行號。
:set nonu 取消行號設(shè)定。
:set ai 自動內(nèi)縮。
:set noai 取消自動內(nèi)縮。
自動內(nèi)縮(automatic indentation)
在編輯文件或程序時,有時會遇到需要內(nèi)縮的狀況,『:set ai』即提供自
動內(nèi)縮的功能,用下例解釋:
.vi test
.(進(jìn)入編輯屏幕后)
this is the test for auto indent
《Tab》start indent ← :set ai (設(shè)自動內(nèi)縮)
《Tab》data
《Tab》data
《Tab》data ← :set noai (取消自動內(nèi)縮)
the end of auto indent.
.注:<Ctrl><d> 可刪除《Tab》字符。
ex指令
讀寫資料
:w 將緩沖區(qū)的資料寫入硬盤中。
:10,20w test 將第10行至第20行的資料寫入test文件。
:10,20w>>test 將第10行至第20行的資料加在test文件之后。
:r test 將test文件的資料讀入編輯緩沖區(qū)的最后。
刪除、復(fù)制及移動
:10,20d 刪除第10行至第20行的資料。
:10d 刪除第10行的資料。
:%d 刪除整個編輯緩沖區(qū)。
:10,20co30 將第10行至第20行的資料復(fù)制至第30行之后。
:10,20mo30 將第10行至第20行的資料移動至第30行之后。
字符串搜尋與取代
s(substitute)指令可查找某行列范圍。
g(global)指令則可查找整個編輯緩沖區(qū)的資料。
s指令以第一個滿足該條件的字符串為其取代的對象,若該行有數(shù)個滿足該條
件的字符串,也僅能取代第一個,若想取代所有的字符串則需加上g參數(shù)。
:1,?$s/old/new/g 將文件中所有的『old』改成『new』。
:10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
:%s/old/new/g 將編輯緩沖區(qū)中所有的『old』改成『new』。
恢復(fù)編輯時被中斷的文件
在編輯過程中,若系統(tǒng)當(dāng)?shù)艋蜻B線中斷,而緩沖區(qū)的資料并還未
被寫回硬盤時,當(dāng)再次回到系統(tǒng),執(zhí)行下列指令即可回復(fù)中斷前
的文件內(nèi)容。
%vi -r filename
編輯多個文件
vi還提供同時編輯多個文件的功能,方法如下:
%vi file1 file2 ..
當(dāng)?shù)谝粋€文件編輯完成后,可利用『:w』將該緩沖區(qū)存檔,而后
再利用 『:n』載入下一個文件。