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