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

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

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

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

圖 5 使用"R"進行替換
按下"R"鍵替換后,Vim 編輯文件左下角會顯示"REPLACE",進入替換狀態。筆者在第一行"root"后輸入英文"need just word, word has word",直到按 Esc 鍵才會退出替換;否則將一直處于替換狀態。
批量替換格式如下:
-
替換范圍內的字符串::替換起始處,替換結束處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"。
服務器維護小知識使用 Vim 進行刪除、粘貼、復制
如果處于命令模式下,則可以按下"x"鍵來刪除光標所在位置的單個字符;快速按兩下"d"鍵來進行整行刪除;如果想要刪除連續多行,例如,想要刪除 10 行,則可按下"10dd",可以快速刪除當前光標所在行下 10 行。
此時被刪除的內容并沒有真正刪除,都臨時放在了內存中。將光標移動到指定位置處,按下"p"鍵,就可以將剛才刪除的內容又粘貼到此處。在軟件開發中可能需要將連續兩行進行互換,就可以將上面的一行過"dd"鍵刪除,再將光標移動到下面,通過"p"鍵將其重新粘貼,這樣就能夠達到兩行互換位置的目的。
"dG"鍵可以刪除從光標所在行一直到文件末尾的全部內容,而"D"鍵可以刪除從光標所在處到這行行尾的內容。如果要刪除指定范圍的行,則可以用":起始行,終止行d"。如刪除第 1~3 行,則輸入":1, 3d",如圖 6 所示,會提示"3 fewer lines"。

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