服務(wù)器維護(hù)Linux Vim基本操作
2020-06-02 16:47 作者:艾銻無限 瀏覽量:
如何做好服務(wù)器維護(hù)?北京艾銻無限科技與你談?wù)処T人員必須知道的服務(wù)器維護(hù)信息
服務(wù)器維護(hù)小知識了解了 Vim 的工作模式后,就可以愉快地使用 Vim 進(jìn)行文件編輯了。先來看一下 Vim 打開文件的方法。
使用Vim打開文件
服務(wù)器維護(hù)小知識使用 Vim 打開文件很簡單,例如,筆者想打開一個自己編寫的文件 /test/vi.test,打開方法如下:
[root@itxdl ~]# vim /test/vi.test
服務(wù)器維護(hù)小知識剛打開文件時進(jìn)入的是命令模式,此時文件的下方會顯示文件的一些信息,包括文胳文件的總行數(shù)和字符數(shù),以及當(dāng)前光標(biāo)所在的位置等,此時可以使用插入命令進(jìn)入輸入模式對文件進(jìn)行編輯,如圖 1 所示。
圖 1 Vim 打開文件
服務(wù)器維護(hù)小知識接下來的操作練習(xí),如果你的 Linux 中沒有自己編寫的文件,或者你懶得編寫文件,則可以直接復(fù)制一個系統(tǒng)文件,方法如下:
[root@itxdl ~]# cp /etc/passwd /tmp/passwd.vi
千萬不要隨意打開一個系統(tǒng)文件就直接開始練習(xí)!
直接進(jìn)入指定位置
如果想直接進(jìn)入 Vim 編輯文件的指定行數(shù)處或者特定字符串所在行,節(jié)省編輯時間,例如,打開 /tmp/passwd.vi 文件時直接進(jìn)入第 20 行,則可以這樣操作:
[root@itxdl ~]# vim +20 /tmp/passwd.vi
打開文件后,直接進(jìn)入"nobody"字符串所在行,則可以這樣操作:
[root@itxdl ~]#vim +/nobody /tmp/passwd.vi
如果文件中有多個"nobody"字符串,則會以査到的第一個為準(zhǔn)。
服務(wù)器維護(hù)小知識打開文件后,接下來開始對文件進(jìn)行編輯。Vim 雖然基于文本模式的編輯器,但卻提供了豐富的編輯功能。對于習(xí)慣使用圖形界面的朋友來說,剛開始會較難適應(yīng),但是熟練后就會發(fā)現(xiàn),使用 Vim 進(jìn)行編輯實(shí)際上更加快速。
服務(wù)器維護(hù)小知識從命令模式進(jìn)入輸入模式進(jìn)行編輯,可以按下 I、i、O、o、A、a 等鍵來完成,不同的鍵只是光標(biāo)所處的位置不同而已。當(dāng)進(jìn)入輸入模式后,你會發(fā)現(xiàn),在 Vim 編輯窗口的左下角會出現(xiàn)"INSERT"標(biāo)志,這就代表我們可行寫入操作了,如圖 1 所示。
圖 1 輸入模式
常用的插入命令:
-
i:在當(dāng)前光標(biāo)所在位置插入隨后輸入的文本,光標(biāo)后的文本相應(yīng)向右移動
-
I:在光標(biāo)所在行的行首插入隨后輸入的文本,行首是該行的第一個非空白字符,相當(dāng)于光標(biāo)移動到行首執(zhí)行i命令
-
a:在當(dāng)前光標(biāo)所在位置之后插入隨后輸入的文本
-
A:在光標(biāo)所在行的行尾插入隨后輸入的文本,相當(dāng)于光標(biāo)移動到行尾再執(zhí)行a命令
-
o:在光標(biāo)所在行的下面插入新的一行。光標(biāo)停在空行首,等待輸入文本
-
O:在光標(biāo)所在行的上面插入新的一行。光標(biāo)停在空行的行首,等待輸入文本
注意,在 Linux 純字符界面中,默認(rèn)是不支持中文輸入的。如果想要輸入中文,則有三種方法:
-
安裝中文語言支持和圖形界面,在圖形界面下輸入中文,使用 gVim (Vim 的圖形前端)。
-
安裝中文語言支持,使用遠(yuǎn)程連接工具(如 PuTTY),在遠(yuǎn)程連接工具中調(diào)整中文編碼,進(jìn)行中文輸入。
-
倘若非要在 Linux 純字符界面中輸入中文,則可以安裝中文插件,如 zhcon。
光標(biāo)移動命令
在進(jìn)行編輯工作之前,需要將光標(biāo)移動到適當(dāng)?shù)奈恢?。Vim 提供了大量的光標(biāo)移動命令,注意這些命令需要在命令模式下執(zhí)行。下面介紹一些常用的光標(biāo)移動命令。
習(xí)慣使用鼠標(biāo)的用戶可能很自然地想到用光標(biāo)來進(jìn)行編輯定位,但是你會發(fā)現(xiàn)鼠標(biāo)不會給你任何反應(yīng)。在Vim中進(jìn)行定位需要通過上、下、左、右方向鍵,并且無論是命令模式還是輸入模式,都可以通過方向鍵來移動光標(biāo)(在編輯模式中,方向鍵是用來査看命令歷史記錄的)。
另外,還可以在命令模式中使用 h、j、k、l 這 4 個字符控制方向,分別表示向左、向下、向上、向左。在大量編輯文檔時,會頻繁地移動光標(biāo),這時使用方向鍵可能會比較浪費(fèi)時間,使用這 4 個鍵就很方便快捷。當(dāng)然,這同樣是一件熟能生巧的事情。
有時候需要迅速進(jìn)入一行中的某個位置,如果能使光標(biāo)一次移動一個單詞就會非常方便??梢栽?a target="_blank">命令模式中使用"W"命令來使光標(biāo)向后跳到下一個單詞的單詞首,或者使用"b"命令使光標(biāo)向前跳到上一個單詞的單詞首,還可以使用"e"命令使光標(biāo)跳到下一個單詞的單詞尾,即:
-
w:移動光標(biāo)到下一個單詞的單詞首
-
b:移動光標(biāo)到上一個單詞的單詞首
-
e:移動光標(biāo)到下一個單詞的單詞尾
可以使用"$"命令將光標(biāo)移至行尾,或者使用"0"或"^"命令將光標(biāo)移至行首。其實(shí),對于 $ 命令來說,可以使用諸如"n$"之類的命令來將光標(biāo)移至當(dāng)前光標(biāo)所在行的之后 n 行的行尾(n 為數(shù)字);對于"0"命令來說卻不可以,但可以用"n^"。
如果在一行中需要將光標(biāo)移動到當(dāng)前行的某個特定字符處,則可以使用 f 命令。
例如,某行為"you can you up, no can no bb",現(xiàn)在需要將光標(biāo)移動到字符 p 處,則可以使用"fp"命令,這樣光標(biāo)就會迅速定位到字符 p 處。f 命令有一個使用條件,即光標(biāo)需在指定字符前。
如果你是一名程序員,那么在使用 Vim 進(jìn)行編輯時經(jīng)常會為將光標(biāo)移動到與一個"("匹配的")"(對于 [] 和 {} 也是一樣的)處而感到頭疼。其實(shí)在 Vim 里面提供了一個非常方便地査找匹配括號的命令,這就是"%"。
比如,在 /etc/init.d/sshd 腳本文件中(最好還是復(fù)制后練習(xí),小心駛得萬年船),想迅速地將光標(biāo)定位到與第 49 行的"{"相對應(yīng)的"}"處,則可以將光標(biāo)先定位在"{"處,然后再使用"%"命令,使之定位在"}"處,如圖 2 所示。

圖 2 使用"%"命令定位括號
可以直接在命令模式中輸入"nG"(n 為數(shù)字,G 為大寫)或":n"(在編輯模式中輸入數(shù)字)命令將光標(biāo)快速地定位到指定行的行首。這種方法對快速移動光標(biāo)非常有效。
使用Vim進(jìn)行編輯
光標(biāo)移動到指定位置后,如何進(jìn)行編輯操作呢?Vim 提供了大量的編輯命令,下面介紹其中一些常用的命令。
一個字符串可以是一個或者多個字母的集合。如果想在 Vim 中査找字符串,則需要在命令模式下進(jìn)行。在 Vim 命令模式中輸入"/要査找的字符串",再按一下回車鍵,就可以從光標(biāo)所在行開始向下査找指定的字符串。如果要向上査找,則只需輸入"?要査找的字符串"即可。
例如,在 /etc/passwd.vi 文件中査找字符串"root",則運(yùn)行命令如圖 3 所示。

圖 3 使用 Vim 進(jìn)行查找
如果匹配的字符串有多個,則可以按"n"鍵向下繼續(xù)匹配査找,按"N"鍵向上繼續(xù)匹配査找。如果在文件中并沒有找到所要査找的字符串,則在文件底部會出現(xiàn)"Pattern not found"提示,如圖 4 所示。

圖 4 未査找到指定字符串的提示
在査找過程中需要注意的是,要査找的字符串是嚴(yán)格區(qū)分大小寫的,如査找"shenchao"和"ShenChao"會得到不同的結(jié)果。如果想忽略大小寫,則輸入命令 ":set ic";調(diào)整回來輸入":set noic"。如果在字符串中出現(xiàn)特殊符號,則需要加上轉(zhuǎn)義字符"/"。常見的特殊符號有 /、*、?、/ $ 等。如果出現(xiàn)這些字符,例如,要査找字符串"10$",則需要在命令模式中輸入"/10/$"。
還可以查找指定的行。例如,要査找一個以 root 為行首的行,則可以進(jìn)行如下操作:
/^root
要査找一個以 root 為行尾的行,則可以進(jìn)行如下操作:
/root$
小寫"r"可以替換光標(biāo)所在處的某個字符,將光標(biāo)移動到想替換的單個字符處,按下"r"鍵,然后直接輸入替換的字符即可。
大寫"R"可以從光標(biāo)所在處開始替換字符,輸入會覆蓋后面的文本內(nèi)容,直到按 Esc 鍵結(jié)束,如圖 5 所示。

圖 5 使用"R"進(jìn)行替換
按下"R"鍵替換后,Vim 編輯文件左下角會顯示"REPLACE",進(jìn)入替換狀態(tài)。筆者在第一行"root"后輸入英文"need just word, word has word",直到按 Esc 鍵才會退出替換;否則將一直處于替換狀態(tài)。
批量替換格式如下:
-
替換范圍內(nèi)的字符串::替換起始處,替換結(jié)束處s/源字符串/替換的字符串/g。
-
替換整篇文檔的字符串::%s/源字符串/替換的字符串/g(如果不加g,則只替換每行第一個找到的字符串)。
例如,要將某文件中所有的"root"替換為"liudehua",則有兩種輸入命令,分別為:
:1, $s/root/liudehua/g
或
:%s/root/liudehua/g
上述命令是在編輯模式下操作的,表示的是從第一行到最后一行,即全文査找"root",然后替換成"liudehua"。
如果剛才的命令變成:10,20 s/root/liudehua/g,則只替換從第 10 行到第 20 行的"root"。
如果處于命令模式下,則可以按下"x"鍵來刪除光標(biāo)所在位置的單個字符;快速按兩下"d"鍵來進(jìn)行整行刪除;如果想要刪除連續(xù)多行,例如,想要刪除 10 行,則可按下"10dd",可以快速刪除當(dāng)前光標(biāo)所在行下 10 行。
此時被刪除的內(nèi)容并沒有真正刪除,都臨時放在了內(nèi)存中。將光標(biāo)移動到指定位置處,按下"p"鍵,就可以將剛才刪除的內(nèi)容又粘貼到此處。在軟件開發(fā)中可能需要將連續(xù)兩行進(jìn)行互換,就可以將上面的一行過"dd"鍵刪除,再將光標(biāo)移動到下面,通過"p"鍵將其重新粘貼,這樣就能夠達(dá)到兩行互換位置的目的。
"dG"鍵可以刪除從光標(biāo)所在行一直到文件末尾的全部內(nèi)容,而"D"鍵可以刪除從光標(biāo)所在處到這行行尾的內(nèi)容。如果要刪除指定范圍的行,則可以用":起始行,終止行d"。如刪除第 1~3 行,則輸入":1, 3d",如圖 6 所示,會提示"3 fewer lines"。

圖 6 刪除指定范圍的行
還有"yy"鍵來復(fù)制單行,或者通過在前面加上數(shù)字來復(fù)制當(dāng)前光標(biāo)所在行下的多行。
有時候可能需要把兩行進(jìn)行連接。如在下面的文件中有兩行,現(xiàn)在需要使其成為一行,實(shí)際上就是將兩行間的換行符去掉??梢灾苯釉?a target="_blank">命令模式中按下"J"鍵
服務(wù)器維護(hù)小知識使用Vim撤銷上一步操作
如果不小心誤刪除了文件內(nèi)容,則可以通過"u"鍵來撤銷剛才執(zhí)行的命令。如果要撤銷剛才的多次操作,可以多按幾次"u"鍵。
估計(jì)前面一大堆的操作已經(jīng)讓你有些力不從心了,其實(shí),這還只是總結(jié)出來的常用部分,不過對于曰常使用基本足夠了,不用死記硬背,只需多練習(xí)就能掌握。
Vim 的保存和退出是在命令模式中進(jìn)行的,為了方便記憶,只需要記住 w、q、!三個符號的含義即可完成任務(wù):
-
字母"w":保存不退出;
-
字母"q":不保存退出;
-
字符"!":強(qiáng)制性操作;
服務(wù)器維護(hù)小知識例如,在命令模式中只輸入"W"字母,就意味著保存但不退出;如果輸入"wq"就意味著保存并且退出;如果輸入"w!"或"wq!"就意味著強(qiáng)制保存或強(qiáng)制保存退出,這種情況經(jīng)常發(fā)生在對文件沒有寫權(quán)限的時候(顯示 readonly,如圖 8 所示),但如果你是文件的所有者或者 root 用戶,就可以強(qiáng)制執(zhí)行。
其他用法,如"q!"表示不保存退出;保留源文件,而另存為其他的文件,可以用"w新文件名",如"w /tmp/shadow.vi"。
在命令模式中,還可以輸入"ZZ"命令退出,按兩次"Shift+Z"快捷鍵方便,強(qiáng)烈推薦。此時如果對文件沒有修改,就是不保存退出;如果對文件已經(jīng)進(jìn)行了修改,就是保存后退出。
IT運(yùn)維 我們選擇北京艾銻無限