- Linux服務器配置與管理完全學習手冊
- 王健
- 3335字
- 2021-03-19 15:14:41
4.3 vi編輯器
Linux系統中的很多功能都需要通過修改相應的配置文件來實現,在字符界面下要修改文件的內容大都要用到vi編輯器,它可以執行輸出、刪除、查找、替換、塊操作等眾多文本操作,而且用戶可以根據自己的需要對其進行定制,這是其他編輯程序所沒有的。vi編輯器就相當于Windows系統中的Word+記事本軟件,只是寫的代碼文件后綴名是.c或.cpp,它在Linux系統中的地位非常重要。vim是vi編輯器的增強版本,在vi編輯器的基礎上擴展了很多實用的功能,但是習慣上也將vim稱作vi。
vi編輯器本身的命令很簡單,命令的基本格式為:
vim [文件名]
如果指定的文件不存在,那么vim命令會創建文件并進入編輯狀態;如果文件存在,則進入編輯狀態對其進行編輯。
4.3.1 vi編輯器的工作模式
vi編輯器界面有三種不同的工作模式:命令模式、輸入模式和末行模式。
1.命令模式
任何時候,不管用戶處于何種模式,只要按一下Esc鍵,即可使vi進入命令行模式。當在shell環境下輸入vi命令啟動vi編輯器時,也是處于該模式下。
在該模式下用戶可以輸入各種合法的vi命令用于管理自己的文檔。此時,從鍵盤上輸入的任何字符都被當作編輯命令來解釋。若輸入的字符是合法的vi命令,則vi在接受用戶命令之后完成相應的動作(需注意的是所輸入的命令并不在屏幕上顯示出來)。若輸入的字符不是vi的合法命令,vi會響鈴提出警報。
2.輸入模式
在命令模式下輸入插入命令i、附加命令a、打開命令o、修改命令c、取代命令r或替換命令s都可以進入到文本輸入模式。在該模式下,用戶輸入的任何字符都被vi當做文件內容保存起來,并將其顯示在屏幕上。在文本輸入過程中,若想回到命令模式下,按Esc鍵即可。
3.末行模式
也稱ex轉義模式。Linux vi命令和Ex編輯器的功能是相同的,二者的主要區別是用戶界面。在vi中,命令通常是單個鍵,例如i、a、o等;而在Ex中,命令是以按Enter鍵結束的正文行。Linux vi命令有一個專門的“轉義”命令,可訪問很多面向行的Ex命令。在命令模式,用戶按“:”鍵即可進入末行模式,此時Linux vi命令會在顯示窗口的最后一行(通常也是屏幕的最后一行)顯示一個“:”作為末行模式的提示符,等待用戶輸入命令。多數文件管理命令都是在此模式下執行的(如把編輯緩沖區的內容寫到文件中等)。末行命令執行完成后,:Linux vi命令自動回到命令模式。例如:輸入
:1,$s / A / a / g
則從文件第一行至文件尾將大寫A全部替換成小寫a。
若在末行模式下輸入命令過程中改變了主意,可用退格鍵將輸入的命令全部刪除之后,再按一下退格鍵,即可使Linux vi命令回到命令模式下。如果要從命令模式轉換到編輯模式,可以輸入命令a或者i;如果需要從輸入模式返回,則按Esc鍵即可。在命令模式下輸入“:”即可切換到末行模式,然后輸入命令。
4.3.2 vi的使用方法
vi編輯器中涉及到的命令和快捷鍵非常多,下面以一個具體的實例來介紹一些常用的操作。
將系統中的/etc/inittab文件復制到/root目錄中,以它為對象用vi編輯器進行編輯。
[root@localhost ~]# cp /etc/inittab /root [root@localhost ~]# vim inittab
1.命令模式下的基本操作
(1)移動光標
要對正文內容進行修改,首先必須把光標移到指定位置,具體操作如表4-11所示。
表4-11 光標移動操作快捷鍵

為了便于查看行間跳轉效果,可以先進入末行模式執行“:set nu”命令顯示行號,然后輸入“1G”或“gg”跳轉到第1行,使用“G”可以跳轉到最后一行,使用“3G”可以跳轉到第3行,“5G”跳轉到第5行等。按^鍵或數字鍵0,可以將光標移動到所在行的行首。按$鍵或End鍵,可以將光標移動到所在行的行尾。先后按“10”+“→”,可以將光標向右移動10個字符;先后按下“10”+“←”,可以將光標向左移動10個字符。
(2)復制、粘貼和刪除
復制、粘貼和刪除的快捷鍵可概括為如表4-12所示。
表4-12 復制、粘貼和刪除操作快捷鍵

以用其他字符來替換光標所指向的字符,或從當前光標位置刪除一個或多個字符為例,當執行操作后從正文中刪除的內容(如字符、字或行)并沒有真正丟失,而是被剪切并復制到了一個內存緩沖區中,用戶可將其粘貼到正文中的指定位置。
(3)文件內容查找
要查找文件中指定字或短語出現的位置,可以用vi直接進行搜索,而不必以手工方式,具體操作如表4-13所示。
表4-13 文件內容查找操作快捷鍵

在命令模式下,按“/”鍵后輸入指定的字符串,將從當前光標處開始向后進行查找。例如輸入“/runlevel”,按Enter鍵后將查找文件中的“runlevel”字符串并高亮顯示結果。光標自動移動到第一個查找結果處,輸入“n”移動到下一個查找結果,輸入“N”移動到上一個查找結果。輸入“?”可以自當前光標處開始向上查找,用法與“/”類似。
(4)撤銷編輯
在編輯文檔的過程中,為消除某個錯誤的編輯命令造成的后果,可以使用撤銷命令。如果用戶希望在新的光標位置重復前面執行過的編輯命令,可用重復命令的方法操作,具體操作方法如圖4-14所示。
表4-14 撤銷操作快捷鍵

輸入“u”可以撤銷最近一次操作,并恢復操作結果,輸入“U”可以撤銷對當前行所做的所有編輯。
(5)文本選中
vi可進入到一種稱為Visual的模式,在該模式下,用戶可以用光標移動命令可視地選擇文本,然后再執行其他編輯操作,例如刪除、復制等。其操作功能如表4-15所示。
表4-15 文本選中操作快捷鍵

2.輸入模式下的基本操作
在命令模式下,正確定位光標后,可用以下命令切換到輸入模式。操作命令如表4-16所示。
表4-16 插入模式切換操作快捷鍵

上面介紹了幾種切換到插入模式的簡單方法。此外還有一些命令,它們允許在進入插入模式之前首先刪去一段正文,從而實現正文的替換。這些操作命令如表4-17所示。
表4-17 替換操作快捷鍵

3.末行模式下的基本操作
在命令模式下輸入“:”可以切換到末行模式,vi編輯器的最后一行將顯示“:”提示符,用戶可以在該提示符后輸入特定的末行命令。
(1)保存并退出vi編輯器
具體操作命令如表4-18所示。
表4-18 vi編輯器保存并退出操作快捷鍵

命令“:w”可以保存文件內容,如需要另存為其他文件,則需要指定新的文件名,“:w /root/newfile”。
命令“:q”可以退出vi編輯器,“:q!”可以不保存并強制退出。“:wq”保存修改并退出。
(2)文件內容替換
具體操作命令如表4-19所示。
表4-19 文件內容替換操作快捷鍵

從上述替換命令可以看到:“g”放在命令末尾,表示對所有搜索到的字符串進行替換;命令中不加“g”,表示只對首次搜索到的字符串進行替換;“g”放在命令開頭,表示對正文中所有包含搜索字符串的行進行替換操作。“s/old/new/4”的功能是從當前行開始將4行內的“old”替換成“new”;而“s/old/new/”的功能是從當前行開始將“old”替換成“new”。
4.shell切換
在編輯正文時,利用vi命令模式下提供的shell切換命令,無須退出vi即可執行Linux命令,十分方便,這也可以說是末行模式。語法格式為:
:! Command
執行完shell命令Command后回到vi。另外,在編輯模式下,輸入“K”,可命令vi查找光標所在單詞的手冊頁,相當于運行man命令。
vi編輯器看似很復雜,其實常用的操作只有幾個,而且同樣的一個操作往往有好幾種不同的實現方法,至于到底用哪種方法,則完全可以憑個人的喜歡。下面是使用vi編輯器的幾個例子,如果讀者能熟練完成,那么對vi編輯器也就掌握得差不多了。
【例4-4】 vi編輯器常用操作練習。
(1)在/root目錄下建立一個名為vitest的目錄。
mkdir /root/vitest
(2)將文件/etc/man.config復制到/root/vitest目錄中。
cp /etc/man.config /root/vitest
(3)使用vi編輯器打開文件/root/vitest/man.config,以便對其進行編輯。
vim /root/vitest/man.config
(4)在vi編輯器中設定行號。
:set nu
(5)移動光標到第58行,再向右移動40個字符,說出現在看到的雙引號內是什么目錄?
先按下“58G”,再按下“40”+“→”,會看到“/dir/bin/foo”。
(6)移動光標到第一行,并且向下搜尋“X11R6”這個字符串,請問它在第幾行?
先按下“gg”,然后按下“/X11R6”搜尋,會看到它在第47行。
(7)將50到100行之間的“man”改為“MAN”,并且一個一個地確認是否需要修改。
:50,100 s/man/MAN/gc
(8)修改完之后,突然反悔了,要全部復原,有哪些方法?
簡單的方法是可以一直按下u鍵命令恢復到原始狀態,或使用不儲存離開命令“:q!”。
(9)復制第51到第60行這10行的內容,并且粘貼到最后一行之后。
先按下“51G”,然后再按下“10yy”,之后按下G鍵,光標到最后一行,再按下p鍵粘貼上這 10行。
(10)刪除第11到30行之間的20行。
按下“11G”之后,再按下“20dd”即可刪除這20行了。
(11)將這個文件在當前目錄下另存成一個名為man.test.config的文件。
:w man.test.config
(12)移到第29行,并且刪除15個字符。
按下“29G”之后,再按下“15x”即可刪除15個字符。
(13)保存后退出。
:wq!
(14)將整個文檔中所有的“runlevel”都替換成“level”。
:% s/runlevel/level/g
- Social Media Mining with R
- Modern Web Testing with TestCafe
- Windows Server 2012 Hyper-V:Deploying the Hyper-V Enterprise Server Virtualization Platform
- 嵌入式Linux驅動程序和系統開發實例精講
- 循序漸進學Docker
- Kubernetes從入門到實踐
- Kali Linux 2018:Windows Penetration Testing
- Django Project Blueprints
- 新編電腦辦公(Windows 10+ Office 2013版)從入門到精通
- Agile IT Security Implementation Methodology
- Learning Joomla! 3 Extension Development(Third Edition)
- Hadoop Operations and Cluster Management Cookbook
- Linux從入門到精通
- C#實用教程(第2版)
- 用“芯”探核:基于龍芯的Linux內核探索解析