出處:Linux寶典(第三版) 2.7 使用vi文本編輯器
只要使用Linux,那么不使用文本編輯器幾乎是不可能的。這是因為多數Linux配置文件是純文本文件,所以有時肯定需要進行手動修改。
如果正在使用GUI,那么可以運行gedit,編輯文本時使用它相當直觀。還有一個簡單的文本編輯器nano,可從shell運行它。但是多數Linux shell用戶會使用vi或emacs命令來編輯文本文件。與圖形編輯器相比,vi或emacs的優勢在于可以在任何shell、字符終端或基于字符的網絡連接(例如,使用telnet或ssh)中使用它們,而無須使用GUI。它們都具有強大的功能,所以可一直使用它們。
本節提供一個簡單的vi文本編輯器教程,使用它可在任意shell中手動編輯配置文件(如果vi不適合您,請參閱選讀部分“了解其他文本編輯器”了解其他選擇)。
Vi編輯器在開始時很難學,可是一旦掌握了它,就永遠不必使用鼠標或功能鍵了——使用鍵盤就可以快速高效地在文件中編輯和移動。
2.7.1 運行vi
通常情況下,運行vi可打開特定的文件。例如,要打開/tmp/test文件,可輸入下面的命令:
$ vi /tmp/test
如果這是一個新文件,應該看到和下面類似的內容:
~
~
~
~
~
"/tmp/test" [New File]
頂部的框表示光標的位置。底部的行通知編輯情況(此處只是打開了一個新文件)。在這兩部分之間,波浪線(~)作為填充符,因為文件中還沒有任何文本。現在這是令人害怕的部分:這里沒有提示、菜單或圖標告訴我們要做什么。不能只是從頂部開始輸入。如果這樣做,計算機就會發出蜂鳴聲。所以有些人抱怨Linux并不友好。
首先需要了解的是不同的操作模式:命令或輸入。vi編輯器始終啟動到命令模式。在添加或修改文件中的文本前,必須輸入命令(一個或者兩個字母加上一個可選的數字)告訴vi您想要做什么。大小寫很重要,所以要按例子所示精確地使用大寫或小寫字母!要進入輸入模式,輸入該輸入命令。輸入下面的命令開始操作:
· a:添加命令。在它之后,可以從光標的右端開始輸入文本。
· i:插入命令。在它之后,可以從光標的左端開始輸入文本。
輸入一些單詞,然后按Enter鍵。重復執行該操作數次,直到有幾行文本為止。完成輸入后,按Esc返回到命令模式。現在文件中有一些文本了,試用下面的鍵或字母在文本中移動:

|
記住Esc鍵!它始終可以回到命令模式。
|
· 方向鍵:在文件中向上、下、左或右移動光標,一次一個字符。也可以使用退格鍵和空格鍵分別向左和向右移動。如果喜歡將手指放在鍵盤上,可使用h(左)、l(右)、j(下)或k(上)來移動光標。
· w:將光標移動到下個單詞的開頭。
· b:將光標移動到前個單詞的開頭。
· 0(zero):將光標移動到當前行的開頭。
· $:將光標稱動到當前行的末尾。
· H:將光標移動到屏幕的左上角(屏幕上的第一行)。
· M:將光標移動到屏幕中間行的第一個字符。
· L:將光標移動到屏幕的左下角(屏幕上的最后一行)。
其他編輯操作中惟一需要知道的是如何刪除文本。下面是一些刪除文本用的vi命令:
· x:刪除光標下的字符。
· X:刪除光標前字符。
· dw:刪除從當前字符開始直到當前單詞末尾的所有字符。
· d$:刪除從當前字符開始直到當前行末尾的所有字符。
· d0:刪除從前一個字符開始直到當前行開頭的所有字符。
要結束編輯,可使用下列擊鍵保存和退出文件:
· ZZ:將當前修改保存到文件并退出vi。
· :w:保存當前文件,但繼續編輯。
· :wq:與ZZ相同。
· :q:退出當前文件。沒有任何未保存的修改時該命令才會工作。
· :q!:退出當前文件,并且不保存對文件進行的修改。

|
如果確實錯誤地修改了文件,那么:q!命令是退出并且放棄修改的最好方法。文件會還原到最近修改的版本。所以如果只是使用:w,有時可能會陷入困境。如果只想取消一些錯誤的編輯,按u鍵即可撤銷修改。
|
現在已學習了一些vi編輯命令。在后面的各節會介紹更多的命令。這里先列出首次試用vi的一些提示:
· Esc:記住,Esc用于回到命令模式(我曾看到有人按下鍵盤上的所有鍵來嘗試退出文件)。在Esc后面鍵入ZZ可以退出命令模式、保存文件并退出vi。
· u:按u鍵可以撤銷之前做的修改。連續按u可以撤銷更前面的修改。
· Ctrl+R:如果決定不再撤銷前面的命令,可使用Ctrl+R進行恢復。本質上,這個命令取消所做的撤銷操作。
· Caps Lock:小心不要錯按了Caps Lock鍵。處于大寫狀態時,在vi中輸入的任何內容都有不同的含義。輸入大寫字母時不會出現警告,但事情卻開始變得不可思議。
· :!命令:在vi中,可使用:!后跟命令名的方式來運行命令。例如,輸入:!date查看當前的時間和日期,輸入:!pwd查看當前目錄,輸入:!jobs查看后臺是否有任務正在運行。命令運行完成時,按Enter鍵就可以返回繼續編輯文件。甚至可以使用該技術從vi中啟動shell(:!bash)、在該shell中運行幾個命令,然后鍵入exit返回到vi(我建議轉到shell前保存文件,防止回到vi后忘記保存)。
· --INSERT:處于插入模式時,INSERT一詞會出現在屏幕底部。
· Ctrl+G:如果忘記了正在編輯的內容,按下這些鍵可在屏幕底部顯示正在編輯的文件名和所在的行。它還顯示文件的總行數、已瀏覽過的部分占該文件的百分比,以及光標所在的列號。這用來在下午停止工作一段時間后,幫助您確定編輯的位置。
2.7.2 在文件中移動
除了前面所述的幾個移動命令外,還有其他方法可在vi文件中移動。要嘗試這些方法,可打開一個不會對其進行太大破壞的大文件(把/var/log/messages復制到/tmp中,然后在vi中打開它)。下面是一些可用的移動命令:
· Ctrl+F:向前翻頁,一次一頁。
· Ctrl+B:向后翻頁,一次一頁。
· Ctrl+D:向前翻頁,一次半頁。
· Ctrl+U:向后翻頁,一次半頁。
· G:轉到文件的末行。
· 1G:轉到文件的首行(使用任意數字可轉到文件中的該行)。
2.7.3 搜索文本
要搜索文本在文件中下次出現的位置,可使用斜線(/)或問號(?)字符。在斜線或問號后面加上模式(字符串或文本)可分別向前或向后搜索該模式。搜索時也可以使用元字符。下面是一些例子:
· /hello:向前搜索單詞hello。
· ?goodbye:向后搜索單詞goodbye。
· /The.*foot:向前搜索包括單詞The,同時在The之后的某處有單詞foot的行。
· ?[pP]rint:向后搜索print或Print。記住,Linux中是區分大小寫的,所以可使用括號來搜索大小寫不同的單詞。
vi編輯器最初基于ex編輯器,而ex編輯器不能在全屏模式下運行。但是它允許運行命令,以便同時在一行或者多行中搜索和修改文本。輸入冒號并且光標到達屏幕底部時,實際上就處于ex模式中。下面的例子用ex命令搜索和修改文本(我選擇搜索Local和Remote,但也可使用其他合適的單詞)。
· :g/Local:搜索單詞Local,并且打印文件中它所出現的行(如果結果多于一個屏幕,則以管道形式將輸出定向到more命令)。
· :s/Local/Remote:在當前行上用Remote代替Local。
· :g/Local/s//Remote:用Remote代替文件中每行第一次出現的Local。
· :g/Local/s//Remote/g:用Remote代替文件中出現的所有Local。
· :g/Local/s//Remote/gp:用Remote代替文件中出現所有的Local,然后打印每一行來查看進行的修改(如果輸出多于一頁,則以管道形式將輸出定向到more命令)。
2.7.4 使用命令和數字
在多數vi命令前都可以使用數字,這樣命令就能夠重復執行該指定數目的次數。這是一次處理多行、多個單詞或多個字符的便捷方法。下面是一些例子:
· 3dw:刪除下面的3個單詞。
· 5cl:修改下面的5個字母(即刪除字母并進入輸入模式)。
· 12j:向下移動12行。
在多數命令前加上數字只是重復執行這些命令。此時對于使用vi命令應該相當精通了。

|
在很多Linux系統中調用vi時,實際上正在調用vim文本編輯器,它運行在vi兼容模式下。進行大量編程工作的人可能更愿意使用vim,因為它以不同的顏色顯示不同的代碼層次。vim還有一些其他有用的功能,例如在打開文檔時,將光標放在最后一次退出文件時光標所在的位置。
|
posted on 2007-10-24 10:22
小言身寸 閱讀(995)
評論(0) 編輯 收藏