- 嵌入式Linux C語言程序設(shè)計基礎(chǔ)教程(微課版)
- 華清遠(yuǎn)見嵌入式學(xué)院 劉洪濤 苗德行主編
- 2498字
- 2021-01-08 20:44:07
1.2 嵌入式Linux編輯器vi的使用

vi的基本使用(一)
vi是 Linux系統(tǒng)的第一個全屏幕交互式編輯工具。它從誕生至今一直得到廣大用戶的青睞,歷經(jīng)數(shù)十年后仍然是人們主要使用的文本編輯工具,足見其生命力之強(qiáng),其強(qiáng)大的編輯功能可以同任何一個最新的編輯器相媲美。
雖然用慣了 Windows 中的 Word 等編輯器的讀者在剛剛接觸 vi 時或多或少會有些不適應(yīng),但使用過一段時間后,就能感受到它的方便與快捷。
提示
Linux 系統(tǒng)提供了一個完整的編輯器家族系列,如 Ed、Ex、vi、Emacs 等,按功能它們可以分為兩大類:行編輯器(Ed、Ex)和全屏幕編輯器(vi、Emacs)。行編輯器每次只能對一行進(jìn)行操作,使用起來很不方便。而全屏幕編輯器可以對整個屏幕進(jìn)行編輯,用戶編輯的文件直接顯示在屏幕上,從而克服了行編輯的那種不直觀的操作方式,便于用戶學(xué)習(xí)和使用,具有強(qiáng)大的功能。
1.2.1 vi的基本模式

vi的基本使用(二)
vi編輯器具有3種工作模式,分別是命令行模式(command mode)、插入模式(insert mode)和底行模式(last line mode),各模式的功能區(qū)分如下。
1.命令行模式
在命令行模式(command mode)下用戶可以輸入命令來控制屏幕光標(biāo)的移動,刪除字符、單詞或行,移動復(fù)制某區(qū)段,也可以進(jìn)入到底行模式或者插入模式。
2.插入模式
用戶只有在插入模式(insert mode)下才可以進(jìn)行字符輸入,用戶按[Esc]鍵可回到命令行模式下。
3.底行模式
在底行模式(last line mode)下,用戶可以將文件保存或退出vi,也可以設(shè)置編輯環(huán)境,如查找字符串、顯示行號等。這一模式下的命令都是以“:”開始。
不過在一般使用時,人們通常把vi簡化成兩個模式,即將底行模式也歸入命令行模式中。
1.2.2 vi的基本操作
1.進(jìn)入與離開vi
進(jìn)入vi可以直接在系統(tǒng)提示符下鍵入“vi<文檔名稱>”,vi可以自動載入所要編輯的文檔或是創(chuàng)建一個新的文檔。如在shell中鍵入“vi hello.c”(新建文檔)即可進(jìn)入vi畫面。如圖1-1所示。

圖1-1 在vi中打開/新建文檔
進(jìn)入vi后,屏幕最左邊會出現(xiàn)波浪符號,凡是有該符號就代表該行目前是空的。此時進(jìn)入的是命令行模式。
要離開vi可以在底行模式下鍵入“:q”(不保存離開),而“:wq”(保存離開)則是存檔后再離開(注意冒號),如圖1-2所示。

圖1-2 在vi中退出文檔
2.vi中3種模式的切換
在 vi 的使用中,3 種模式的切換是最為常用的。在處理的過程中,讀者要時刻注意屏幕左下方的提示。在插入模式下,左下方會有“插入”字樣,而在命令行或底行模式下則無提示。
(1)命令行模式、底行模式轉(zhuǎn)為插入模式
在命令行模式或底行模式下轉(zhuǎn)入到插入模式有3種方法,如表1-1所示。
表1-1 命令行模式、底行模式轉(zhuǎn)為插入模式

在這里,最常用的是“i”,在轉(zhuǎn)入插入模式后的界面如圖1-3所示。
(2)插入模式轉(zhuǎn)為命令行模式、底行模式
從插入模式轉(zhuǎn)為命令行模式、底行模式比較簡單,只需使用[Esc]鍵即可。
(3)命令行模式與底行模式轉(zhuǎn)換
命令行模式與底行模式間的轉(zhuǎn)換不需要其他特別的命令,只需要直接鍵入相應(yīng)模式中的命令鍵即可。

圖1-3 命令模式轉(zhuǎn)入插入模式
3.vi的刪除、修改與復(fù)制
在 vi 中進(jìn)行刪除、修改都可以在插入模式下使用鍵盤上的方向鍵及[Delete 鍵],另外,vi 還提供了一系列的操作指令,用以大大簡化操作。
這些指令記憶起來比較復(fù)雜,希望讀者能夠配合操作進(jìn)行實(shí)驗(yàn)。以下命令都是在命令行模式下使用的。
表1-2所示為vi的刪除(/剪切)、修改與復(fù)制指令。
表1-2 vi的刪除/剪切、修改與復(fù)制指令

4.vi的光標(biāo)移動
由于許多編輯功能都是通過光標(biāo)的定位來實(shí)現(xiàn)的,因此,掌握vi中光標(biāo)移動的方法很重要。雖然使用方向鍵也可以實(shí)現(xiàn)vi的操作,但vi的指令可以實(shí)現(xiàn)復(fù)雜的光標(biāo)移動,只要熟悉以后都非常方便,希望讀者能切實(shí)掌握。
表1-3所示為vi中的光標(biāo)移動指令,這些指令都是在命令行模式下使用的。
表1-3 vi中光標(biāo)移動的指令

5.vi的查找與替換
vi中的查找與替換也非常簡單,其操作有些類似在Telnet中的使用。其中,查找的命令在命令行模式下,而替換的命令則在底行模式下(以“:”開頭),其指令如表1-4所示。
表1-4 vi的查找與替換指令

關(guān)于替換范圍,有很多種寫法,其中:
百分號(%)表示所有行;
點(diǎn)(.)表示當(dāng)前行;
美元符號($)表示最末行。
舉例如下。
:10,20 s/str1/str2/ 表示用字符串str2替換第10行到第20行中首次出現(xiàn)的字符串str1。
:2,$-5 s/str1/str2/g表示用字符串str2替換第二行直到全文的倒數(shù)第五行所有出現(xiàn)的字符串str1。
:s/str1/str2/表示用字符串str2替換行中首次出現(xiàn)的字符串str1。
:s/str1/str2/g表示用字符串str2替換行中所有出現(xiàn)的字符串str1。
:.,$ s/str1/str2/g表示用字符串str2替換正文當(dāng)前行到末尾所有出現(xiàn)的字符串str1。
:1,$ s/str1/str2/g表示用字符串str2替換正文中所有出現(xiàn)的字符串str1。
:%s/str1/str2/g表示用字符串str2替換正文中所有出現(xiàn)的字符串str1。
類似,在進(jìn)行剪切復(fù)制和粘貼操作時,也可以帶上范圍,即按塊操作。
range y塊復(fù)制。
舉例如下。
:10, 20y表示復(fù)制第10行到第20行。
:.,$y 表示復(fù)制當(dāng)前行到文章最后一行。
range d塊刪除。
舉例如下。
:10, 20d表示剪切第10行到第20行。
:.,$d 表示剪切當(dāng)前行到文章最后一行。
6.vi的文件操作指令
vi中的文件操作指令都是在底行模式下進(jìn)行的,所有的指令都是以“:”開頭,其指令如表1-5所示。
表1-5 vi的文件操作指令

1.2.3 vi的使用實(shí)例分析
本小節(jié)給出了一個vi使用的完整實(shí)例,通過這個實(shí)例,讀者一方面可以熟悉vi的使用流程,另一方面也可以熟悉Linux的操作。希望讀者能夠先自己思考每一步的操作,再看后面的實(shí)例解析答案。
1.vi使用實(shí)例內(nèi)容
① 在“/home”目錄下建一個名為vi的目錄。
② 進(jìn)入vi目錄。
③ 將文件“/etc/inittab”復(fù)制到當(dāng)前目錄下。
④ 使用 vi 編輯當(dāng)前目錄下的 inittab。inittab 是/etc 下的系統(tǒng)配置文件。Linux 啟動時會讀取其內(nèi)容。里面定義了默認(rèn)的運(yùn)行級別和要執(zhí)行的程序。
⑤ 將光標(biāo)移到該行。
⑥ 復(fù)制該行內(nèi)容。
⑦ 將光標(biāo)移到最后一行行首。
⑧ 粘貼復(fù)制行的內(nèi)容。
⑨ 撤銷第(8)步的動作。
⑩將光標(biāo)移動到最后一行的行尾。
?粘貼復(fù)制行的內(nèi)容。
?光標(biāo)移到“si::sysinit:/etc/rc.d/rc.sysinit”。
?刪除該行。
?存盤但不退出。
?將光標(biāo)移到首行。
?插入模式下輸入“Hello,this is vi world!”。
?返回命令行模式。
?向下查找字符串“0:wait”。
?再向上查找字符串“halt”。
?強(qiáng)制退出vi,不存盤。
2.vi使用實(shí)例解析
在該實(shí)例中,每一步的使用命令如下所示。
① mkdir /home/vi
② cd /home/vi
③ cp /etc/inittab ./
④ vi ./inittab
⑤ 17<enter>(命令行模式)
⑥ yy
⑦ G
⑧ p
⑨ u
⑩$
?p
?21G
?dd
?:w(底行模式)
?1G
?i并輸入“Hello,this is vi world!”(插入模式)
?Esc
?/0:wait(命令行模式)
??halt
?:q!(底行模式)
- Visual Basic 6.0程序設(shè)計計算機(jī)組裝與維修
- 程序員數(shù)學(xué):用Python學(xué)透線性代數(shù)和微積分
- Apache Spark 2 for Beginners
- 數(shù)據(jù)結(jié)構(gòu)與算法JavaScript描述
- JS全書:JavaScript Web前端開發(fā)指南
- RabbitMQ Cookbook
- Learning SciPy for Numerical and Scientific Computing(Second Edition)
- ExtJS高級程序設(shè)計
- Natural Language Processing with Java and LingPipe Cookbook
- Swift 4從零到精通iOS開發(fā)
- Visual FoxPro 6.0程序設(shè)計
- Learning Splunk Web Framework
- Learning Ionic
- Learning Kotlin by building Android Applications
- 實(shí)戰(zhàn)Python網(wǎng)絡(luò)爬蟲