Linux系統(tǒng)提供了一個完整的編輯器家族系列,如Ed、Ex、vi和emacs等。按功能它們可以分為兩大類:行編輯器(Ed、Ex)和全屏幕編輯器(vi、emacs)。行編輯器每次只能對一行進行操作,使用起來很不方便。而全屏幕編輯器可以對整個屏幕進行編輯,用戶編輯的文件直接顯示在屏幕上,從而克服了行編輯那種不直觀的操作方式,便于用戶學習和使用,具有強大的功能。
vi是Linux系統(tǒng)的第一個全屏幕交互式編輯程序,它從誕生至今一直得到廣大用戶的青睞,歷經(jīng)數(shù)十年仍然是人們主要使用的文本編輯工具,足以見其生命力之強,而強大的生命力是其強大的功能帶來的。由于大多數(shù)讀者在此之前都已經(jīng)用慣了Windows平臺上的編輯器,因此,在剛剛接觸時總會或多或少不適應,但只要習慣之后,就能感受到它的方便與快捷。
1.vi的模式vi有3種模式,分別為命令行模式、插入模式及命令行模式。下面具體介紹各模式的功能。
(1)命令行模式。
用戶在用vi編輯文件時,最初進入的為一般模式。在該模式中用戶可以通過上下移動光標進行“刪除字符”或“整行刪除”等操作,也可以進行“復制”、“粘貼”等操作,但無法編輯文字。
(2)插入模式。
只有在該模式下,用戶才能進行文字編輯輸入,用戶按[ESC]可鍵回到命令行模式。
(3)底行模式。
在該模式下,光標位于屏幕的底行。用戶可以進行文件保存或退出操作,也可以設置編輯環(huán)境,如尋找字符串、列出行號等。
2.vi的基本流程(1)進入vi,即在命令行下鍵入“vihello”(文件名)。此時進入的是命令行模式,光標位于屏幕的上方,如圖3.2所示。
圖3.2進入vi命令行模式
(2)在命令行模式下鍵入i進入插入模式,如圖3.3所示??梢钥闯?,在屏幕底部顯示有“插入”表示插入模式中的輸入狀態(tài),在該模式下可以輸入文字信息。
圖3.3進入vi插入模式
(3)最后,在插入模式中,按“Esc”鍵,則當前模式轉入命令行模式,并在底行行中輸入“:wq”(存盤退出)進入底行模式,如圖3.4所示。
這樣,就完成了一個簡單的vi操作流程:命令行模式→插入模式→底行模式。由于vi在不同的模式下有不同的操作功能,因此,讀者一定要時刻注意屏幕最下方的提示,分清所在的模式。
圖3.4進入vi底行模式
3.vi的各模式功能鍵(1)命令行模式常見功能鍵如表3.1所示。
表3.1 vi命令行模式功能鍵
功能鍵
功能
i
切換到插入模式,在目前的光標所在處插入輸入的文字,已存在的文字會向后退
a
切換到插入模式,并從目前光標所在位置的下一個位置開始輸入文字
o
切換到插入模式,且從行首開始插入新的一行
[ctrl]+[b]
屏幕往“后”翻動一頁
[ctrl]+[f]
屏幕往“前”翻動一頁
[ctrl]+[u]
屏幕往“后”翻動半頁
[ctrl]+[d]
屏幕往“前”翻動半頁
0(數(shù)字0)
光標移到本行的開頭
G
光標移動到文件的最后
nG
光標移動到第n行
$
移動到光標所在行的“行尾”
n<Enter>
光標向下移動n行
/name
在光標之后查找一個名為name的字符串
?name
在光標之前查找一個名為name的字符串
x
刪除光標所在位置的一個字符
X
刪除光標所在位置的前一個字符
dd
刪除光標所在行
ndd
從光標所在行開始向下刪除n行
yy
復制光標所在行
nyy
復制光標所在行開始的向下n行
p
將緩沖區(qū)內的字符粘貼到光標所在位置(與yy搭配)
u
恢復前一個動作
(2)插入模式的功能鍵只有一個,即按“Esc”鍵可回到命令行模式。
(3)底行模式常見功能鍵如表3.2所示。
表3.2 vi底行模式功能鍵
功能鍵
功能
:w
將編輯的文件保存到磁盤中
:q
退出vi(系統(tǒng)對做過修改的文件會給出提示)
:q!
強制退出vi(對修改過的文件不作保存)
:wq
存盤后退出
:w[filename]
另存一個名為filename的文件
:setnu
顯示行號,設定之后,會在每一行的前面顯示對應行號
:setnonu
取消行號顯示
注意
vim是vi的升級版,與vi相比擴展了很多功能且保持與vi的90%相兼容,感興趣的讀者可以查看相關資料進行學習。
3.2.2初探emacs正如前面所述,vi是一款功能非常強大的編輯器,它能夠方便、快捷、高效地完成用戶的任務,那么,在此再次向讀者介紹另一款編輯器是否多此一舉呢?答案是否定的。因為emacs不僅僅是一款功能強大的編譯器,而且是一款融合編輯、編譯、調試于一體的開發(fā)環(huán)境。雖然,它沒有VisualStudio一樣絢麗的界面,但是它可以在沒有圖形顯示的終端環(huán)境下出色的工作,相信追求強大功能和工作效率的用戶不會介意它樸素的界面的。emacs的使用和vi截然不同。在emacs里,沒有類似于vi的3種“模式”。emacs只有一種模式,也就是編輯模式,而且它的命令全靠功能鍵完成。因此,功能鍵也就相當重要了。
但emacs卻還使用一個不同vi的“模式”,它的“模式”是指各種輔助環(huán)境。比如,當編輯普通文本時,使用的是“文本模式(TextMode)”,而當寫程序時,使用的則是如“c模式”、“shell模式”等。
下面,首先介紹一下emacs作為編輯器的使用方法,以幫助讀者熟悉emacs的環(huán)境。
注意
emacs縮寫注釋:
C+<chr>表示按住Ctrl鍵的同時鍵入字符<chr>。因此,C+f就表示按住Ctrl鍵同時鍵入f。
M+<chr>表示當鍵入字符<chr>時同時按住Meta或Edit或Alt鍵(通常為Alt鍵)。
1.emacs安裝現(xiàn)在較新版本的Linux(如本書中所用的RedHatEnterprise4AS)的安裝光盤中一般都自帶有emacs的安裝包,用戶可以通過安裝光盤進行安裝(一般在第2張光盤中)。
2.啟動emacs安裝完emacs之后,只需在命令行鍵入“emacs[文件名]”(若缺省文件名,也可在emacs編輯文件后另存時指定),也可從“編程”→“emacs”打開,如3.5圖所示的就是從“編程”→“emacs”打開的emacs歡迎界面。
圖3.5emacs歡迎界面
接著可單擊任意鍵進入emacs的工作窗口,如圖3.6所示。
從圖中可見,emacs的工作窗口分為上下兩個部分,上部為編輯窗口,底部為命令顯示窗口,用戶執(zhí)行功能鍵的功能都會在底部有相應的顯示,有時也需要用戶在底部窗口輸入相應的命令,如查找字符串等。
圖3.6emacs的工作窗口
3.進入emacs在進入emacs后,即可進行文件的編輯。由于emacs只有一種編輯模式,因此用戶無需進行模式間的切換。下面介紹emacs中基本編輯功能鍵。
(1)移動光標。
雖然在emacs中可以使用“上”、“下”、“左”、“右”方向鍵來移動單個字符,但筆者還是建議讀者學習其對應功能鍵,因為它們不僅能在所有類型的終端上工作,而且讀者將會發(fā)現(xiàn)在熟練使用之后,輸入這些Ctrl加字符會比按方向鍵快很多。表3.3列舉了emacs中光標移動的常見功能鍵。
表3.3 emacs光標移動功能鍵
功能鍵
功能
功能鍵
功能
C-f
向前移動一個字符
M-b
向后移動一個單詞
C-b
向后移動一個字符
C-a
移動到行首
C-p
移動到上一行
C-e
移動到行尾
C-n
移動到下一行
M-<(M加
“小于號”)
移動光標到整個文本的開頭
M-f
向前移動一個單詞
M->(M加
“大于號”)
移動光標到整個文本的末尾
(2)剪切和粘貼。
在emacs中可以使用“Delete”和“BackSpace”刪除光標前后的字符,這和用戶之前的習慣一致,在此就不贅述。以詞和行為單位的剪切和粘貼功能鍵如表3.4所示。
表3.4 emacs剪切和粘貼
功能鍵
功能
功能鍵
功能
M-Delete
剪切光標前面的單詞
M-k
剪切從光標位置到句尾的內容
M-d
剪切光標前面的單詞
C-y
將緩沖區(qū)中的內容粘貼到光標所在的位置
C-k
剪切從光標位置到行尾的內容
C-xu
撤銷操作(先操作C+x,接著再單擊u)
注意
在emacs中對單個字符的操作是“刪除”,而對詞和句的操作是“剪切”,即保存在緩沖區(qū)中,以備后面的“粘貼”所用。
(3)復制文本。
在emacs中的復制文本包括兩步:選擇復制區(qū)域和粘貼文本。
選擇復制區(qū)域的方法是:首先在復制起始點(A)按下“C-Space”或“C-@(C-Shift-2)”使它成為一個標識點,再將光標移至復制結束點(B),再按下“M-w”,就可將A與B之間的文本復制到系統(tǒng)的緩沖區(qū)中。再使用功能鍵C-y將其粘貼到指定位置。
(4)查找文本。
查找文本的功能鍵如表3.5所示。
表3.5 emacs查找文本功能鍵
功能鍵
功能
C-s
查找光標以后的內容,并在對話框的“I-search:”后輸入要查找的字符串
C-r
查找光標以前的內容,并在對話框的“I-searchbackward:”后輸入要查找的字符串
(5)保存文檔。
在emacs中保存文檔的功能鍵為“C+xC+s”(即先操作C+x,接著再操作C+s),這時,屏幕底下的對話框會出現(xiàn)如“Wrote/root/workplace/editor/why”的字樣,如圖3.7所示。
圖3.7emacs中保存文檔
另外,emacs在編輯時會為每個文件提供“自動保存(autosave)”的機制,而且自動保存的文件的文件名前后都有一個“#”,例如,編輯名為“hello.c”的文件,其自動保存的文件的文件名就叫“#hello.c#”。當用戶正常地保存了文件后,emacs就會刪除這個自動保存的文件。這個機制當系統(tǒng)發(fā)生異常時非常有用。
(6)退出文檔。
在emacs中退出文檔的功能鍵為“C-xC-c”。
4.emacs中的模式emacs不僅僅是個強大的編譯器,它還是一個集編譯、調試等于一體的工作環(huán)境。在這里,讀者將會了解到emacs作為編譯器的最基本的概念,感興趣的讀者可以參考《LearningGNUEmacs,SecondEdition》一書進一步學習emacs。
在emacs中并沒有像vi中那樣的“命令行”、“編輯”模式,只有一種編輯模式。這里所說的“模式”是指emacs里的各種輔助環(huán)境。下面著重講解C模式。
當我們啟動某一文件時,emacs會判斷文件的類型,從而自動選擇相應的模式。當然,用戶也可以手動啟動各種模式,用功能鍵“M-x”,然后再輸入模式的名稱,如圖3.8所示,這樣就啟動了“C模式”。
圖3.8emacs中選擇模式
在強大的C模式下,用戶擁有“自動縮進”、“注釋”、“預處理擴展”、“自動狀態(tài)”等強大功能。在“C模式”下編輯代碼時,可以用“Tab”鍵自動地將當前行的代碼產(chǎn)生適當?shù)目s進,使代碼結構清晰、美觀,它也可以指定縮進的規(guī)則。
源代碼要有良好的可讀性,必須要有良好的注釋。在emacs中,用“M-”可以產(chǎn)生一條右縮進的注釋。C模式下是“/*comments*/”形式的注釋,C++模式下是“//comments”形式的注釋。當用戶高亮選定某段文本,然后操作“C-cC-c”,就可以注釋該段文字。
emacs還可以使用C預處理其運行代碼的一部分,以便讓程序員檢測宏、條件編譯以及include語句的效果。
5.emacs編譯調試程序emacs可以讓程序員在emacs環(huán)境里編譯自己的軟件。此時,編輯器把編譯器的輸出和程序代碼連接起來。程序員可以像使用Windows的其他開發(fā)工具一樣,將出錯位置和代碼定位聯(lián)系起來。
emacs默認的編輯命令是對一個make(在本章3.6節(jié)中會詳細介紹)的調用。用戶可以打開“tool”下的“Compile”進行查看。emacs可以支持大量的工程項目,以方便程序員的開發(fā)。
另外,emacs為gdb調試器提供了一個功能齊全的接口。在emacs中使用gdb的時候,程序員不僅能夠獲得gdb的全部標準特性,還可以獲得通過接口增強而產(chǎn)生的其他性能。