Linux 系統(tǒng)下的文本編輯器有很多種,包括圖形模式下的gedit、kwrite等,文本模式下的vi、vim(vi的增強版本)、emacs等。其中vi和emacs是Linux系統(tǒng)中最常用的兩個編輯器。本節(jié)主要介紹vi編輯器,主要內(nèi)容包括:
希望通過本節(jié)的學(xué)習(xí),能夠基本掌握vi編輯器的使用方法和相關(guān)技巧,能夠獨立完成程序源代碼的編輯和修改。
vi編輯器是Linux系統(tǒng)下的標(biāo)準(zhǔn)編輯器。雖然命令繁多復(fù)雜,并且絕大多數(shù)功能的輸入都依靠鍵盤來完成,但如果我們熟悉掌握之后就會發(fā)現(xiàn)vi編輯器的功能、效率等都是其他圖形界面編輯器無法比擬的,下面讓我們來揭開它的神秘面紗。
在終端輸入命令vi,后面接著輸入想要創(chuàng)建或編輯的文件名,即可進(jìn)入vi編輯器。
$ vi example.c
命令的結(jié)果如圖1-1所示:
圖1-1 vi編輯器新建文件
如果vi命令后面所輸入的文件不存在,則系統(tǒng)會自動創(chuàng)建一個以該字符串命名的文本文件。如上圖,光標(biāo)停留在左上方,由于新建文件中沒有任何內(nèi)容,所以每一行的開頭都為波浪線。窗口的底部為狀態(tài)欄,顯示當(dāng)前編輯文件的相關(guān)信息。
打開文件后,光標(biāo)停留在屏幕左上方。狀態(tài)欄顯示了當(dāng)前編輯文件的文件名、行數(shù)以及字符數(shù)等信息,如圖1-2所示。
vi命令打開文件時還可以帶參數(shù),這些參數(shù)用于修正vi的打開方式,主要包括如下:
如果只需閱讀文件內(nèi)容而不想對其進(jìn)行修改時,可以使用這個參數(shù),以防對文件的誤操作,如下:
$ vi –R example.c
運行命令如圖1-3所示。
圖1-2 vi編輯器打開文件 圖1-3 以只讀方式打開文件
該參數(shù)可以在保存文件時對其進(jìn)行加密,以后每次打開都需要輸入密鑰,否則將出現(xiàn)亂碼。
如果在打開vi時,沒有給出文件名,也沒有給出任何參數(shù),即:
$ vi
命令結(jié)果如圖1-4所示:
圖1-4 直接打開vi編輯器
此時,vi編輯器中所有行都為空,窗口中央給出的是vi編輯器的使用幫助,當(dāng)用戶在vi中輸入文本或執(zhí)行命令時,該幫助信息會自動消失。另外,如果以這種方式打開vi編輯器,在保存文件時,需要指定文件名。
vi有3種工作模式:普通模式、編輯模式和命令模式,這3種模式之間可以相互切換,如圖1-5所示。
圖1-5 vi編輯器的工作模式
由Shell進(jìn)入vi編輯器時,首先進(jìn)入普通模式。在普通模式下,從鍵盤輸入任何字符都被當(dāng)作命令來解釋。普通模式下沒有任何提示符,當(dāng)輸入命令時立即執(zhí)行,不需要回車,而且輸入的字符不會在屏幕上顯示出來。
普通模式下可以輸入命令進(jìn)行光標(biāo)的移動,字符、單詞、行的復(fù)制、粘帖以及刪除等操作。
編輯模式主要用于文本的輸入。在該模式下,用戶輸入的任何字符都被作為文件的內(nèi)容保存起來,并在屏幕上顯示出來。在普通模式下,輸入a(附加命令)、c(修改命令)、i(插入命令)、o(另起新行)、r(取代命令)以及s(替換命令)都將進(jìn)入編輯模式,此時vi窗口的最后一行會顯示“插入”。輸入i命令時屏幕上并無變化,但是通過執(zhí)行i命令,編輯器由普通模式切換為編輯模式,如圖1-6所示。
圖1-6 編輯器由普通模式切換為編輯模式
接著輸入x=,屏幕顯示如圖1-7所示。
要返回到普通模式,只需按鍵Esc即可。
圖1-7 在編輯模式下輸入字符
命令模式下,用戶可以對文件進(jìn)行一些附加處理。盡管普通模式下的命令可以完成很多功能,但要執(zhí)行一些如字符串查找、替換、顯示行號等操作還是必須要進(jìn)入命令模式的。
在普通模式下輸入冒號即可進(jìn)入命令模式,此時vi窗口的狀態(tài)行會顯示出冒號,等待用戶輸入命令。用戶輸入完成后,按回車執(zhí)行,之后vi編輯器又返回到普通模式下。
當(dāng)編輯完畢,需要退出vi編輯器時,可以在命令模式下使用命令退出vi,返回到Shell。
保存退出是指將緩沖區(qū)中的內(nèi)容寫入文件,可以使用的命令為wq和x,如圖1-8所示。
圖1-8 vi編輯器的保存退出
強行退出是指無條件退出,不把緩沖區(qū)中的內(nèi)容寫入文件,所使用的命令為q!。其中感嘆號“!”表示不管文件是否被修改,放棄所修改的內(nèi)容強行退出。
直接退出和強行退出的區(qū)別是如果文件內(nèi)容有修改則給出提示,如圖1-9所示,否則直接退出。直接退出使用的命令為q。
圖1-9 vi編輯器的直接退出
應(yīng)該要注意一點,vi編輯器編輯文件時,用戶的操作都是基于緩沖區(qū)中的副本進(jìn)行的。如果退出時沒有保存到磁盤,則緩沖區(qū)中的內(nèi)容就會被丟失。所以,在退出vi編輯器時應(yīng)該考慮是否需要保存所編輯的內(nèi)容,然后再選擇執(zhí)行合適的退出命令。保存命令為w,如果打開vi時沒有給出文件名,這時還需要給相互文件名。