一、vi的工作模式
vi有兩種基本的工作模式:命令(編輯)模式和文本輸入模式。
命令模式:vi初始啟動(dòng)時(shí)進(jìn)入命令模式秸弛。它不顯示用戶(hù)輸入四康,只會(huì)被解釋執(zhí)行搪搏。
文本輸入模式:它就顯示用戶(hù)的輸入,只是作為文本寫(xiě)入到用戶(hù)的文件中闪金。
狀態(tài)行:屏幕底部的一行疯溺,通常為第24行,vi在該行上反饋編輯操作的結(jié)果哎垦。錯(cuò)誤信息或其他一些信息會(huì)在狀態(tài)行上顯示出來(lái)囱嫩,vi還會(huì)在第24行上顯示那些以冒號(hào)、斜杠或問(wèn)號(hào)開(kāi)頭的命令漏设。
二墨闲、命令模式
注意:
1,如果想使用光標(biāo)移動(dòng)鍵郑口,就必須使vi處于命令模式鸳碧。
2,當(dāng)vi編輯器處于命令模式時(shí)犬性,大部分命令在按下鍵時(shí)就會(huì)啟動(dòng)瞻离,因此不需要使用回車(chē)鍵來(lái)指明命令行的結(jié)束。
vi的光標(biāo)移動(dòng)鍵鍵 功能
h或[←] 將光標(biāo)向左移動(dòng)一位
j 或[↓] 將光標(biāo)向下移動(dòng)一位
k或[↑] 將光標(biāo)向上移動(dòng)一位
l 或[→] 將光標(biāo)向右移動(dòng)一位
$ 將光標(biāo)移到當(dāng)前行的行尾
w 將光標(biāo)向右移動(dòng)一個(gè)字
b 將光標(biāo)向左移動(dòng)一個(gè)字
e 將光標(biāo)移到字尾
0(零) 將光標(biāo)移到當(dāng)前行的行首
[Reuturn]鍵 將光標(biāo)移到下一行的行首
[Spacebar]鍵 將光標(biāo)向右移動(dòng)一位
[Backspace]鍵 將光標(biāo)向左移動(dòng)一位
命令模式下vi編輯器的文本修改鍵
鍵 功能
x 刪除光標(biāo)位置指定的字符
dd 刪除光標(biāo)所在的行
u 撤銷(xiāo)最近的修改
U 撤銷(xiāo)對(duì)當(dāng)前行做的所有修改
r 替換光標(biāo)位置上的一個(gè)字符
R 替換從光標(biāo)位置開(kāi)始的字符仔夺,同時(shí)改變vi到文本輸入模式
.(點(diǎn)) 重復(fù)上一次的修改
三琐脏、文本輸入模式
切換到文本輸入模式的命令鍵
命令鍵 功能
i 在光標(biāo)左側(cè)輸入正文
I 在光標(biāo)所在行的開(kāi)頭輸入正文
a 在光標(biāo)右側(cè)輸入正文
A 在光標(biāo)的所在行的未尾輸入正文
o 在光標(biāo)所在行的下一行增添新行,并且光標(biāo)位于新行的開(kāi)頭
O 在光標(biāo)所在行的上一行增添新行缸兔,并且光標(biāo)位于新行的開(kāi)頭
關(guān)閉文件
● 按[Esc]鍵日裙,確保vi處于命令模式。
● 輸入 : 將提示符放到屏幕底部的狀態(tài)行上惰蜜。
● 輸入q![Return],該命令不保存改變并退出vi昂拂。按[!]鍵表示確認(rèn)放棄修改。
當(dāng)vi處于文本編輯器模式時(shí)[Return]的使用:
● 如果光標(biāo)在行尾抛猖,光標(biāo)的右邊沒(méi)有文本按[Return]鍵將會(huì)在當(dāng)前行的下面添加一個(gè)空行
● 如果光標(biāo)正好在當(dāng)前行的第一個(gè)字符上格侯,按[Return]鍵將會(huì)在當(dāng)前行的上面添加一空行
● 如果光標(biāo)在本行的其他位置,并且它的右邊有文本财著,按[Return]鍵會(huì)把該行分成兩行
編輯多個(gè)文件
● 編輯另一個(gè)文件:vi 可能同時(shí)打開(kāi)多個(gè)文件联四,另一種方法是用:e(edit)
● 讀另一個(gè)文件 :在vi編輯器命令模式下,輸入:r撑教,后面跟文件名朝墩,并按[Return]鍵,:r命令將指定文件的副本放到緩沖區(qū)中光標(biāo)位置之后。指定的文件成為當(dāng)前文件的一部分伟姐。
● 寫(xiě)入另一個(gè)文件:vi編輯器允許用戶(hù)將當(dāng)前編輯文件的一部分寫(xiě)(保存)到另一個(gè)文件中收苏。首先亿卤,用戶(hù)需要指出希望保存的行的范圍,然后用重排文本
vi編輯器的剪切和粘貼鍵
鍵 功能
d 刪除指定位置的文本鹿霸,并保存到臨時(shí)緩沖區(qū)中排吴。
y 復(fù)制指定位置的文本到臨時(shí)緩沖區(qū)。
P 將指定緩沖區(qū)的內(nèi)容放到當(dāng)前光標(biāo)位置之上
p 將指定緩沖區(qū)的內(nèi)容放到當(dāng)前光標(biāo)位置之下
c 刪除文件并使vi進(jìn)入文本輸入模式懦鼠,這是刪除和插入命令的組合
vi操作符的域
部分vi域控制鍵
域 功能
$ 標(biāo)識(shí)域?yàn)閺墓鈽?biāo)位置開(kāi)始到當(dāng)前行尾
0(零) 標(biāo)識(shí)域?yàn)閺墓鈽?biāo)位置前到當(dāng)前行首
e或w 標(biāo)識(shí)域?yàn)閺墓鈽?biāo)位置開(kāi)始到當(dāng)前字尾
b 標(biāo)識(shí)域?yàn)閺墓鈽?biāo)位置前到當(dāng)前字首
四钻哩、命令的組合使用
在unix中許多的命令是可以組合使用的,這樣就顯出了 unix的強(qiáng)大之處肛冶。下面就列一些常用基本的文本處理的組合命令
◎使用刪除操作符和域控制鍵
★實(shí)例1:刪除從光標(biāo)位置開(kāi)始到當(dāng)前行尾的文本憋槐,按d$
★實(shí)例2:刪除從光標(biāo)位置之前到當(dāng)前行首的文本,按d0
★實(shí)例3:刪除從光標(biāo)位置后的一個(gè)字淑趾,按dw
★實(shí)例4:刪除光標(biāo)位置后的多個(gè)字(例如阳仔,3個(gè)字),按3dw
★實(shí)例5:刪除到字尾扣泊,按de
★實(shí)例6:刪除到前一個(gè)字的字首近范,按db
◎使用移出操作符和域控制鍵
★實(shí)例1:復(fù)制從當(dāng)前光標(biāo)位置開(kāi)始到當(dāng)前行尾的文本,按y$
★實(shí)例2:復(fù)制從當(dāng)前光標(biāo)位置開(kāi)始到當(dāng)前行首的文本延蟹,按y0
◎使用修改操作符和域控制鍵
修改操作符c可以同時(shí)刪除和移出操作符一樣使用域控制鍵评矩。c操作符與其他操作符不同的是它將vi從命令模式轉(zhuǎn)換到文本輸入模式。
Vi編輯器的某些版本用一個(gè)標(biāo)志來(lái)標(biāo)記將被刪除的最后一個(gè)字符阱飘。這個(gè)標(biāo)志通常是美元符($)斥杜,它覆蓋將被刪除的最后一個(gè)字符。
★ 實(shí)例:使用修改操作符和域控制鍵來(lái)修改一個(gè)字沥匈,按cw.
五蔗喂、在vi中使用緩沖區(qū)
● 數(shù)字編號(hào)緩沖區(qū):vi編輯器使用9個(gè)臨時(shí)緩沖區(qū),編號(hào)從1到9高帖。每次刪除或復(fù)制的文本都放在這些緩沖區(qū)中缰儿,用戶(hù)指定緩沖區(qū)號(hào)就可以訪(fǎng)問(wèn)任何一個(gè)緩沖區(qū)。每次新刪除或復(fù)制的文本替換緩沖區(qū)以前的內(nèi)容散址。這意味著緩沖區(qū)1總是保留最近被修改的內(nèi)容乖阵。
用put操作符,并在它前面加上緩沖區(qū)號(hào)就可以找回?cái)?shù)字編號(hào)緩沖區(qū)的內(nèi)容预麸。指定緩沖區(qū)的格式可以表示為:
雙引號(hào)+n(其中瞪浸,n是緩沖區(qū)號(hào),取1到9)+(p或P)
● 字母編號(hào)緩沖區(qū):vi編輯器還使用26個(gè)命名緩沖區(qū)吏祸,這些緩沖區(qū)用小寫(xiě)字母a到z來(lái)命名对蒲。用戶(hù)通過(guò)指定緩沖區(qū)我名字引用它們。這些緩沖區(qū)同數(shù)字緩沖區(qū)類(lèi)似,不同之處在于齐蔽,每次用戶(hù)在文件中刪除或移出文本時(shí),vi編輯器不自動(dòng)改變緩沖區(qū)的內(nèi)容床估。用戶(hù)可以將刪除或復(fù)制的文本存到指定的緩沖區(qū)含滴,然后用put操作符將指定緩沖區(qū)的文本復(fù)制到文件的其他地方。
實(shí)例:完成下列操作丐巫,練習(xí)使用命令對(duì)指定的緩沖區(qū)進(jìn)行操作谈况。
□ 輸入”wdd,刪除當(dāng)前行,將它的副本保存到緩沖區(qū)w”递胧。
□ 輸入”wp,將緩沖區(qū)w的內(nèi)容復(fù)制到光標(biāo)位置”碑韵。
□ 輸入”z7yy,復(fù)制7行到緩沖區(qū)z”。
□ 輸入”zp,將緩沖區(qū)z的內(nèi)容(7行)復(fù)制到光標(biāo)位置”缎脾。
注意:1.這些命令不會(huì)顯示在屏幕上祝闻。
2.字母編號(hào)緩沖區(qū)用小寫(xiě)字母a到z命名
3.使用這些命令不需要按[Return]鍵。
六遗菠、光標(biāo)定位鍵
vi的翻頁(yè)鍵
鍵 功能
[Ctrl-d] 將光標(biāo)向下移動(dòng)到文件尾联喘,通常每次移動(dòng)12行
[Ctrl-u] 將光標(biāo)向上移動(dòng)到文件頭,通常每次移動(dòng)12行
[Ctrl-f] 將光標(biāo)向下移動(dòng)到文件尾辙纬,通常每次移動(dòng)24行
[Ctrl-b] 將光標(biāo)向上移動(dòng)到文件頭豁遭,通常每次移動(dòng)24行
定位光標(biāo):使用的G命令,前面加上希望光標(biāo)將位于的行號(hào)贺拣。
實(shí)例:完成下列操作蓖谢,使第1000行成為當(dāng)前行。
□ 輸入1000G譬涡,將光標(biāo)移到第1000行上闪幽。
□ 輸入1G,將光標(biāo)移到第1行上涡匀。
□ 輸入G沟使,將光標(biāo)移到文件尾。
另一種有用的命令是[Ctrl-g]渊跋,它告訴用戶(hù)當(dāng)前行號(hào)腊嗡。例如,在命令模式下按[Ctrl-g]鍵拾酝,vi編輯器顯示類(lèi)似于以下的信息:
“myfirst”line 30 of 90 – 30%
七燕少、設(shè)置vi的環(huán)境
部分vi環(huán)境選項(xiàng)
選項(xiàng) 縮寫(xiě) 功能
autoindent ai 將新行與前一行的行首對(duì)齊
ignorecase ic 在搜索選項(xiàng)中忽略大小寫(xiě)
magic 允許在搜索時(shí)使用特殊字符
number nu 顯示行號(hào)
report 通知用戶(hù)上一個(gè)命令影響的行號(hào)
scroll 設(shè)定[Ctrl-d]命令翻動(dòng)的行數(shù)
shiftwidth sw 設(shè)置縮進(jìn)的空格數(shù),與autoindent選項(xiàng)一起使用
showmode smd 在屏幕的右角顯示vi編輯器的模式
terse 縮短錯(cuò)誤信息
wrapmargin wm 設(shè)置右邊界為指定的字符數(shù)
八蒿囤、行長(zhǎng)和行回繞
用戶(hù)的終端通常有80列客们。當(dāng)輸入文本到達(dá)行尾時(shí),開(kāi)始一個(gè)新行。
wrapmargin選項(xiàng):當(dāng)用戶(hù)輸入文本到達(dá)距右邊界指定的字符數(shù)時(shí)底挫,wrapmargin選項(xiàng)使vi編輯器斷開(kāi)輸入的文本恒傻。例如,要設(shè)置wrapmargin為10(其中10為距離屏幕右邊界的字符數(shù))建邓,輸入:set wrapmargin=10并按[Return]鍵盈厘。則輸入到達(dá)70列時(shí),vi編輯器開(kāi)始新行官边。就如同用戶(hù)按了[Return]鍵一樣了沸手。
wrapmargin選項(xiàng)的默認(rèn)值是0(零)。要關(guān)閉wrapmargin選項(xiàng)注簿,輸入:set wrapmargin=0并按[Return]鍵
九契吉、縮寫(xiě)和宏
vi編輯器為用戶(hù)提供一些捷徑使輸入更簡(jiǎn)單,:ab和:map兩個(gè)命令就起這個(gè)作用诡渴。
● 編寫(xiě)操作符:ab(abbreviateion)命令可以給任何字符指定縮寫(xiě)捐晶。
例如,要縮寫(xiě)經(jīng)常在本書(shū)中使用的UNIX Operating System為uno,輸入:ab uno UNIX Operating System.如果uno是另一字的一部分妄辩,如unofficial租悄,,則不會(huì)發(fā)生擴(kuò)展恩袱。
要取消縮寫(xiě)泣棋,使用unab(unabbreviate)操作符。例如畔塔,要取消uno縮寫(xiě)潭辈,輸入:unab uno并按[Return]鍵。
● 宏操作符(map)可以指定單個(gè)鍵代表鍵序列澈吨,
例如把敢,要指定命令5dd(刪除5行)為q,輸入: map q 5dd并按[Return]鍵。
用戶(hù)也可以在map命令中指定終端的功能鍵谅辣。在這種情況下修赞,輸入#n作為鍵名,其中n指功能鍵號(hào)桑阶。例如柏副,將5dd指定給[F2]鍵,vi刪除5行文本蚣录。
十割择、最后的vi命令――1運(yùn)行shell命令
用戶(hù)可以在vi命令行中運(yùn)行UNIX的shell命令。這一方便的特性允許用戶(hù)暫時(shí)將vi編輯器放在一邊萎河,轉(zhuǎn)而執(zhí)行shell命令荔泳。=侗(驚嘆號(hào))提示vi下一個(gè)命令是UNIX的shell命令。如果需要玛歌,用戶(hù)也可以查看shell命令的執(zhí)行結(jié)果并將其加入到文本中昧港。使用: r(read)命令后面跟!支子,可將命令的結(jié)果插入到編輯文件中创肥。
實(shí)例:下面的命令序列顯示!的使用方式译荞。
□ 輸入: ! ls
□ 輸入: ! who
□ 輸入: !date
□ 輸入: !pwd
□ 輸入: r ! date
□ 輸入:r ! cal 1 2005
□ 輸入:r ! vi mylast
2行連接
使用J命令連接兩行。J命令將當(dāng)前行下面的一行連接到當(dāng)前行上休弃,放到光標(biāo)位置之后吞歼。如果兩行連接產(chǎn)生一個(gè)長(zhǎng)行,vi將其按屏幕進(jìn)行折行塔猾。
實(shí)例:完成下列操作即可連接兩行篙骡。
□ 使用光標(biāo)移動(dòng)鍵將光標(biāo)放在第一行行尾。
□ 按J鍵丈甸,vi將當(dāng)前行下面的一行連到當(dāng)前行上糯俗。
3搜索和替換
vi的搜索命令(/和?)
實(shí)例:下面的命令序列演示vi的搜索和替換功能
□ 輸入:/UNIX并按[Return]鍵睦擂,向下搜索找到第一個(gè)UNIX得湘。
□ 輸入cwunix并按[Return]鍵,將UNIX替換為unix/
□ 輸入n,找到下一個(gè)UNIX顿仇。
4文件恢復(fù)選項(xiàng)
用-r選項(xiàng)啟動(dòng)vi編輯器崩潰時(shí)正在編輯的文件淘正。例如,下面的命令可以恢復(fù)myfirst
$ vi –r myfirst [Return]…………………………………啟動(dòng)vi的恢復(fù)選項(xiàng)
如果不提供文件名進(jìn)行編輯臼闻,或不記得當(dāng)時(shí)編輯的文件名鸿吆,可輸入vi –r命令
$ vi –r [Return]
vi 有三種模式:命令模式;插入模式述呐;末行模式惩淳。
打開(kāi)編輯器默認(rèn)就是命令模式,可以通過(guò)輸入命令進(jìn)入插入模式乓搬,從插入模式返回命令模式要按Esc鍵思犁,在命令模式下輸入 :(冒號(hào))切換到末行模式。
插入相關(guān)命令:
? a //在光標(biāo)后插入文本
? i //在光標(biāo)前插入文本
? o //在當(dāng)前行下面插入一行
? O //在當(dāng)前行上面插入一行
? I //在當(dāng)前行開(kāi)頭插入文本
? A //在當(dāng)前行末尾插入文本
光標(biāo)移動(dòng)相關(guān)命令:
? Home //移動(dòng)到光標(biāo)所在行的最前面
? End //移動(dòng)到光標(biāo)所在列的最后面
? b //移動(dòng)到下個(gè)字的第一個(gè)字母
? w //移動(dòng)到上個(gè)字的第一個(gè)字母
? H //移動(dòng)到屏幕的第一列
? M //移動(dòng)到屏幕的中間列
? L //移動(dòng)到屏幕的最后列
? fx //向右移動(dòng)到x字符上
? Fx //向左移動(dòng)到x字符
? Pageup //向上翻頁(yè)
? Pagedown //向下翻頁(yè)
? shift+g // 跳到文件尾
? ddp //和下一行交換
刪除相關(guān)命令:
? x //刪除光標(biāo)所在處的一個(gè)字符
? dw //刪除光標(biāo)所在處向后的一個(gè)單詞
? D //刪除光標(biāo)處至行尾的所有字符
? dd //刪除光標(biāo)所在行进肯,可以加數(shù)字表示要?jiǎng)h除的行數(shù)
替換命令:
? r //替換光標(biāo)所在處的一個(gè)字符
? R //向右連續(xù)替換
? cw //替換光標(biāo)向右的一個(gè)單詞
查找命令:
? /ac //向光標(biāo)下文查找ac抒倚,按n向下查找下一個(gè)按N回到上一個(gè)
? ?ac //向光標(biāo)上文查找ac,按n向上查找下一個(gè)按N回到上一個(gè)
復(fù)制與粘貼相關(guān)命令:
? yw //將光標(biāo)向右一個(gè)單詞拷入剪貼板
? y$ //將光標(biāo)至行尾的字符拷入剪貼板
? yy //將當(dāng)前行拷入剪貼板
? p // 將剪貼板中的內(nèi)容粘貼在光標(biāo)后
文件保存及退出相關(guān)命令:
? :q // 不保存退出
? :q! // 不保存強(qiáng)制性退出
? :w //保存編輯不退出
? :wq //保存并退出
? :wq! //強(qiáng)制保存退出
本文來(lái)自: