最詳細的 Vi 編輯器使用指南

daxixiong發表於2015-10-27

引言

Vi編輯器是一個被許多Unix使用者使用的基於螢幕的編輯器。VI編輯器具備強大的功能來幫助程式設計師,但是許多初學者因為要面對很多不同的指令而對使用VI敬而遠之。寫作本教程的目的就是要幫助初學者適應VI編輯器的使用,當然,也有一些小節的內容與VI的慣用者有關。在講解的同時舉出了很多的例子,最佳的學習方法就是試著在Unix下執行這些例子,並試著舉一反三。在這個世界上,沒有比自己親自去經歷更好的學習方式了。

約定

在本教程中,使用以下的約定:

^X表示一個控制字元。例如,如果你在教程中看到:^d,其意是你按下了ctrl鍵,然後敲入了相應的字母。對於本例來說,你就按下ctrl鍵,然後敲d。

開始之前

VI編輯器使用全螢幕,因此瞭解你使用的是何種型別的終端是有必要的。當你登入的時候,wiliki會問你的終端是什麼。提示資訊像這個樣子:TERM = (vt100)。

如果你知道自己的終端是一個vt100(或者一個能夠當作vt100用的模擬器),在你登入的時候,就為終端型別敲擊Enter鍵。如果你有一個hp終端,為終端型別輸入“hp”並回車。如果你不確定自己的終端型別,問一個實驗室的管理員,或者是請別人幫助你設定正確的終端型別。

如果在登入的時候,你犯了一個錯誤,輸入了錯誤的終端型別,不要緊張,退出就行了。你可以輸入以下的命令來修補設定:

首先,告訴你的shell你的終端是何種型別。(如果你不確定你的shell是什麼,可以輸入這個命令:echo $SHELL)。對於上面已經給出的例子,終端型別是“vt100”。用你擁有的任何終端型別去替換它。對於C shell(/bin/csh),命令是這個:set term=vt100。對於Bourne Shell(/bin/sh)或者是Korn Shell(/bin/ksh),命令如下:export TERM   TERM=vt100。下一步,用這個命令重設你的終端:tset。

現在,終端的型別被正確設定(希望如此吧),你已經準備好來開始使用VI了。

啟動VI編輯器

VI編輯器允許使用者生成新的檔案或編輯已存在的檔案。啟動VI編輯器的命令是:vi,緊接著是檔名。例如,為了要編輯一個叫做temporary的檔案,你要輸入“vi temporary”並回車。你也可以不用檔名來啟動vi,但是當你想儲存自己的工作的時候,你必須要告訴VI將要把這些內容儲存到哪個檔案中。

當你第一次啟動VI的時候,你會看到在螢幕的左邊充滿了波浪號(像“~”)。在檔案結束之後的任何空行都是如此顯示。在螢幕的底部,檔名被顯示出來。如果專門指定了一個已經存在的檔案,檔案的大小也會被顯示出來,就像這樣:”filename” 21 lines, 385 characters。
如果你指定的檔案不存在,系統會告訴你這是一個新檔案,就像這樣:”newfile” [New file]。

如果你不要檔名而啟動VI,當VI啟動的時候,螢幕的底部會是空白。如果螢幕沒有顯示這些預期的結果,你的終端型別可能被錯誤地設定了。輸入:q並回車來退出VI,並且修補你的終端型別。如果你不知道怎麼做,問一下實驗室管理員。

退出VI

你已經知道了如何進入VI,瞭解一下如何退出它也是很好的。VI編輯器有兩種模式,為了退出VI,必須要處於命名(command)模式。敲擊“Escape”或“Esc”鍵(如果你的終端沒有這個鍵,可以試試^[,或control-[)來進入命名模式。如果在你敲擊“Escape”的時候,你已經在命令模式之下,不要擔心。系統會發出警告,但是你仍然處於命名模式。

離開VI的命令是:q。當處於命名模式之下,輸入冒號以及“q”,並回車。如果你的檔案被修改過了,編輯器會警告你,同時也不讓你退出。為了忽略此訊息,不儲存就退出VI的命令是:q!。它讓你不用儲存任何改動而退出VI。

當然,一般說來,在一個編輯器中,你還是想儲存你做出的改變。儲存編輯器內容的命令是:w。你可以將以上命令和退出命令結合起來,即:wq。你可以指定一個不同的檔名來儲存這些內容,這是通過在:w之後指定檔名來實現的。例如,你想將你正在編輯的檔案儲存為另外一個叫做filename2的檔名,你可以輸入: w filename2並回車。

另外一種儲存你的改變並退出VI的方法是ZZ命令。在命令模式下,輸入ZZ,它會做與:wq相同的事情。如果檔案的內容有任何改變,這些改變會被儲存下來。這是離開編輯器的最容易的方法,只需要敲擊鍵盤兩次。

VI的兩種模式

大多數使用者瞭解VI編輯器的第一件事就是它有兩種模式:command(命令)和insert(插入)。command模式允許命令條目來操縱文字。這些命令通常是一個或兩個字元長,可以敲幾下鍵盤便被輸入了。insert模式將任何在鍵盤上敲擊的內容輸入現在的檔案中。
VI是以command模式啟動的。有幾個命令來將VI編輯器轉入insert模式。最常用的命令是a和i。這兩個命令在前面已經描述過了。當你在insert模式下時,敲擊退出(Escape)按鈕,你就退出此模式了。如果你的終端沒有這個鍵, ^[或control-[也行。你可以快速敲兩下退出(Escape)按鈕,這時VI肯定會在command模式之下的。當你已經在command模式之下時敲擊退出(Escape)按鈕並不會讓編輯器退出command模式。系統會提醒你已經在此模式下了。

如何在命令模式下輸入命令

命令(command)模式下的命令的格式一般是這樣(括號中是可選的引數):[count] command [where]。

大多數命令只有一個字元長,包括那些使用控制字元的命令。本節中描述的命令是在VI編輯器中最經常使用的。

count可以是1到9之間的任何一個。例如,x命令刪除在游標之下的那個字元。如果你在命令模式下輸入23x,會有23個字元被刪除。
一些命令使用一個可選的where引數,你可以指定命令影響到多少行或者是檔案的多少部分。where引數也能夠是任何移動游標的命令。

一些簡單的VI命令

以下是一個簡單的命令集合,它們足以讓初學者起航。也有許多其它的方便的命令,這將在後續章節中討論。

  • a:進入插入(insert)模式,輸入的字元會被插入到當前游標位置之後。如果你指定了數目(count),插入的所有文字會被重複那麼多次。
  • h:向左把游標移動一個字元的位置。
  • i:進入插入(insert)模式,輸入的字元會被插入到當前游標位置之前。如果你指定了數目(count),插入的所有文字會被重複那麼多次。
  • j:將游標向下移動一行。
  • k:將游標向上移動一行。
  • l:向右把游標移動一個字元的位置。
  • r:將游標所在位置的字元替換掉。指定數目(count)來替換許多字元。
  • u:撤銷對檔案所作的最後一次修改。再一次輸入u會恢復最後一次修改。
  • x:刪除游標所在位置的字元。count指出了要刪除多少字元。游標之後的字元會被刪除掉。

VI中的文字快取

VI編輯器有36個快取來儲存文字片,同時也有一個通用目的快取(general purpose buffer)。任何時候,在檔案中,當一個文字塊被刪除或整形,它被放入通用目的快取中。VI的大多數使用者很少使用其它快取,因此在沒有其它快取的情況下也能夠活得很快活。如果被指定的話,文字塊也能夠被儲存在其它快取中。用”命令來指定快取。在輸入”之後,必須要輸入指明快取的字母或數字。例如,命令:”mdd使用了快取m,最後的兩個字元代表刪除當前行。類似地,可以使用p或P命令來貼上文字。”mp在當前游標位置之後貼上快取m的內容。對於之後兩節所使用的任何命令,這些快取被指定用於文字或段落的臨時儲存。

剪下與整形

用於剪下的常用命令是d。此命令從檔案中刪除文字。在這個命令之前是一個可選的count,之後是一個移動說明。如果你輸入dd,會刪除當前行。以下是這些命令的一些組合:

  • d^:刪除從行首到當前游標所在位置的內容。
  • d$:刪除從當前游標所在位置到行末的內容。
  • dw:刪除從當前游標所在位置到字末的內容。
  • 3dd:從當前游標所在位置向下刪除3行。

與d命令的功能類似,y命令從檔案中提取文字而不刪除文字。

貼上

貼上的命令是p或P。它們的區別僅在於當貼上的時候相對於游標的位置。p在當前游標之後貼上專門的或一般的快取,而P則在當前游標之前貼上專門的或一般的快取。在貼上命令之前指定數目(count)會將文字貼上數次。

縮排程式碼與檢查

VI編輯器有功能來幫助程式設計師將它們的程式碼佈局得更加的整潔。有一個變數來為程式碼中的各級巢狀設定縮排。為了使用這個功能,可以閱讀本教程的“customization section”一節。例如,將偏移寬度設為4個字元的命令是:set sw=4。

以下的命令縮排你的程式碼或移除縮排,同時也能夠用count來指定:

  • <<:將當前行向左移動一個偏移寬度。
  • >>:將當前行向右移動一個偏移寬度。

VI編輯器也有一個有用的功能來幫助你在遇到懸掛圓括號或大括號的時候檢查你的原始碼。%命令會尋找與一個特別的右括號相對應的左括號,或與之相反。將游標放到一個括號上並敲擊%來將游標移動到相應的括號。這個功能對於檢查未閉合的括號是很有用的。如果有一個不匹配的括號存在,VI會發出嘟嘟聲,這是在提示你沒有發現配對的符號。

文字與字元搜尋

VI編輯器有兩類搜尋:字串和字元。對於一個字串搜尋,使用/和?命令。當你開始使用這個命令的時候,在最底部一行會顯示你敲入的命令,在命令後面可以輸入你想要搜尋的特殊字串。這兩個命令僅在搜尋發生的方向上有區別。在檔案中,/命令向前(向下)搜尋,?命令向後(向上)搜尋。n和N命令分別在相同或相反的方向上重複之前的搜尋命令。一些字元對於VI來說,有特殊的意義,因此在它們前面必須要放置一條斜線(\)來被當作搜尋表示式的一部分。

特殊字元:

  • ^:行的開始(一個搜尋表示式的開始)。
  • .:匹配一個單字元。
  • *:匹配0個或多個之前的字元。
  • $:行的結束(一個搜尋表示式的結束)。
  • [:開始一系列匹配,或者是非匹配的表示式。例如:/f[iae]t匹配三者之一:fit fat fet。在這種形式下,它不會匹配這些:/a[^bcd]不會匹配任何字串,除了帶一個a和另外一個字母:ab ac ad。
  • <:將之放在以反斜線結束的表示式中來尋找一個字的結束或開始。例如,/\<the\>只會發現the,而不是這些字:there和other。
  • >:參考對於“<”的描述。

字元搜尋在一行之內搜尋來尋找在命令之後輸入的一個字元。f和F命令只在當前行上搜尋一個字元。f向前搜尋,而F向後搜尋,同時,游標會移動到所發現字元的位置。

t和T命令只在當前行上搜尋一個字元,對於t來說,游標移動到字元之前的位置,而T向後搜尋行到字元之後的位置。
這兩套命令使用;和,命令來重複,其中;在相同方向上重複上一條字元搜尋命令,而,在相反方向上重複上一條字元搜尋命令。

VI(以及EX)的設定

你能夠在啟動的時候個性化(customization)VI的行為。有幾個編輯選項使用:set命令,以下是在Wiliki上的VI和EX編輯器選項(你可以在命令模式下通過輸入:set all並回車來獲得此列表):

有一些選項具有用等號“=”設定的值,而其它選項有的有,有的沒有。(這些開關型別叫做Boolean,在它們的前面有“no”來暗示它們不是設定的。)在此展示的選項是沒有進行個性化設定的選項。下面用縮寫給出了這些選項的描述。例如,命令設定自動縮排,可以輸入:set autoindent或set ai。為了去除設定,你可以輸入:set noautoindent或set noai。

  • autoindent (ai):此選項對編輯器進行設定以使得在一個縮排行之後的行像前面行那樣縮排。如果你想back over此縮排,可以在第一個字元的位置輸入^D。^D工作在插入(insert)模式,並不在命令(command)模式。當然,可以用shiftwidth來設定縮排的寬度,下面有解釋。
  • exrc:在啟動的過程中,會讀入當前目錄下的.exrc檔案。這可以在環境變數EXINIT或你的主目錄下的.exrc檔案中設定。
  • mesg:如果對選項解除設定,要關閉訊息,使用:set nomesg,這樣做以使得當你在使用編輯器的時候沒有人能夠打擾你。
  • number (nu):用在左邊的行號來顯示行。
  • shiftwidth (sw):此選項帶有一個值,用此值來定義一個軟體製表位(tabstop)的寬度。(這個軟體製表位用於<<和>>命令。)例如,你可以用此命令來設定偏移寬度為4:set sw=4。
  • showmode(smd):此選項用於顯示你所用的編輯器的實際模式。如果你在插入(insert)模式下,螢幕的最底下一行會顯示INPUT MODE。
  • warn:如果你修改了檔案,但是沒有儲存,該選項會警告你。
  • window(wi):該選項設定VI使用的螢幕上的行數。例如,要設定VI編輯器只使用你的螢幕的12行(因為你的modem很慢),你可以使用這個:set wi=12。
  • wrapscan(ws):此選項會影響到文字搜尋的行為。如果wrapscan被設定了,要是沒有在檔案的底部找到要尋找的文字,它會試著在開始部分尋找它。
  • wrapmargin(wm):如果此選項有大於0的值,編輯器會自動“word wrap”。也就是說,如果你佔用左邊部分太多的空間,文字會轉向下一行而不用敲回車。例如,要設定wrap邊界為2個字元,可以輸入:set wm=2。

寫和將金鑰(關鍵字)對映到其它金鑰(關鍵字)

一個在VI編輯器中有用的EX編輯器命令是abbreviate命令。它讓你為特殊的字串設定縮寫。此命令像這樣:ab string thing to substitute for。例如,如果要敲入名字“Humuhumunukunukuapua`a”,但是你不想敲入整個名字,那麼你可以使用縮寫。在此例中,像這樣敲入命令:ab 9u Humuhumunukunukuapua`a。

現在,當你單獨敲入9u的時候,VI會敲入它所代表的整個字。如果你敲入了9university,它就不會替換這個字。

去除之前定義的縮寫的命令是unabbreviate。例如,去除之前例子的命令就是”:una 9u”。如果你要獲取縮寫列表,只需要簡單地輸入:ab,而不用任何定義。

另外一個對於個性化很有幫助的EX編輯器命令就是對映(mapping)命令。有兩類對映(mapping)命令。一個用於命令模式,另一個用於插入模式。它們分別是:map和:map!。對映和縮寫的工作方式類似,你給系統一個關鍵序列,並給系統另外一個關鍵序列去替換之前的序列。(被替換掉的關鍵序列通常是VI命令。)

EXINIT環境變數和.exrc檔案

有兩種方式來個性化VI編輯器。如果你在主目錄下生成了一個叫做.exrc的檔案,當VI啟動的時候,那裡面所有的命令都會被讀到。另外一種方法是設定一個叫做EXINIT的環境變數。該選項在你的shell的建立檔案裡被設定。如果你使用/bin/csh (C-Shell),命令如下(被放置在.cshrc檔案裡面):setenv EXINIT ‘…’。

如果你使用/bin/sh or /bin/ksh,命令如下(被放置在.profile檔案中):export EXINIT EXINIT=’…’。

就像例子中所說的,不要放在…。在這個空間中,放置你想要建立的命令。例如,如果你想自動縮排,行編號,以及wrap邊界三個字元,setenv命令(對於C shell來說)像這樣:setenv EXINIT ‘set ai nuwm=3′。

如果你想在setenv EXINIT中放置不止一個命令,用豎線(|)將命令隔開。例如,在命令模式中,要將“g”命令對映到“G”字元,命令是:map g G,與上面的命令結合,可以得到:setenv EXINIT ‘set ai nuwm=3|map g G’。

如果你想生成叫做.exrc的檔案,你可以在檔案中放置與EXINIT之後的引用一樣的東西。

當終端出現問題的時候恢復你的工作

VI編輯器編輯你的檔案的一個臨時副本,當編輯結束之後,或者當你叫它儲存的時候,它就將臨時檔案的內容放到原始檔案中。如果在你編輯檔案的時候發生了故障,VI編輯器會試圖儲存你正在做的任何工作,並且為了之後的恢復而儲存它。(注意:如果在你編輯檔案的時候VI死掉了,它會給你發一封郵件告訴你如何恢復它。-r選項代表恢復。如果你正在編輯檔案vitalinfo,而你意外退出了,“vi”編輯器的-r選項可以幫你忙。該命令像這樣:vi -r vitalinfo。在使用-r選項一次之後,你必須要將你恢復的內容儲存到實際的檔案中。-r選項只能在每一個失敗的VI會話中使用一次。)

有關在工作臺上使用VI的警告

當你使用工作臺時,必須要知道兩件事情:一次(連續)編輯相同的檔案許多次,以及改變螢幕的大小。

因為VI編輯你的原始檔案的一個副本,並且將那個副本的內容儲存到原始檔案中,如果你登入了好幾次,並且使用VI編輯相同的檔案好幾次,如果你一次儲存在一個視窗上,然後又儲存到另外一個視窗上,第一次儲存的對於檔案的改變會被覆蓋掉。確保對於每個檔案,你只是執行一個副本。

如果你使用一個工作臺的一個終端程式,你可以通過拖動視窗的邊界來改變螢幕的大小。如果你對大小還不盡滿意,輸入以下命令:eval `resize`。如果這個命令無效,另外一個命令如下:eval `/usr/bin/X11/resize`。

如果大小是錯誤的,編輯器不會正常執行。如果你對於螢幕尺寸存在任何疑問,可以向計算機實驗室的管理員求助,他會幫你設定正確的尺寸。

VI命令的總結

以下是按照功能分類的VI命令的一個總結列表。有可能還會有其它命令,可以檢視VI的線上手冊。為了方便,你可以以文字檔案方式儲存該檔案,然後刪除你認為自己不會用的一些命令,並列印出剩下的較短的檔案。

剪下與貼上/刪除文字

  • “:指定一個任何命令使用的快取。在”之後輸入一個字母或數字,它們會對應一個快取。
  • D:從當前游標所在位置向後刪除直到行尾。
  • P:在當前游標位置或行之前貼上專門的快取。如果沒有指定快取(使用”命名),“P”就使用通用快取。
  • X:刪除游標之前的字元。
  • Y:將當前行整形到指定的快取。如果沒有指定快取,就使用通用快取。
  • d:刪除,直到where。“dd”刪除當前行。一個數字就表示刪除那麼多行。被刪除的內容放置在由”命令指定的快取中。如果沒有指定快取,就使用通用快取。
  • p:在當前游標位置或行之後貼上專門的快取。如果沒有指定快取(使用”命名),“p”就使用通用快取。
  • x:刪除游標之下的字元。輸入一個數字表示要刪除多少字元。被刪除的字元位於游標之後。
  • y:整形,將結果放到一個快取中。“yy”整形當前行。輸入一個數字表示要整形的行數。可以用”命令來指定快取。如果沒有指定快取,就使用通用快取。

插入新的文字

  • A:在當前行之後追加。
  • I:在一行的開頭處插入。
  • O:在當前游標位置的上面一個新行進入插入模式。
  • a:進入插入模式,輸入的字元會在當前游標位置之後插入。如果在命令之前輸入一個數字,那麼會插入內容多次。
  • i:進入插入模式,輸入的字元會在當前游標位置之前插入。如果在命令之前輸入一個數字,那麼會插入內容多次。
  • o:在當前游標位置之下的一個新行進入插入模式。

在檔案內移動游標

  • ^B:向後回滾一頁。輸入數字就會回滾那麼多頁。
  • ^D:向前滾動半個視窗。輸入數字會滾動那麼多行。
  • ^F:向前滾動一頁。輸入數字會滾動那麼多頁。
  • ^H:將游標向左移動一個空格。輸入數字會移動那麼多個空格。
  • ^J:在同一列向下移動游標一行。輸入數字會向下移動那麼多行。
  • ^M:移動到下一行的第一個字元處。
  • ^N:在同一列向下移動游標一行。輸入數字會向下移動那麼多行。
  • ^P:在同一列向上移動游標一行。輸入數字會向上移動那麼多行。
  • ^U:向後回滾半個視窗。輸入數字會回滾那麼多行。
  • $:將游標移動到當前行的末尾。輸入數字會移動到下面行的末尾。
  • %:將游標移動到匹配的括號處。
  • ^:將游標移動到第一個非空白的字元處。
  • (:將游標移動到一個句子的開頭。
  • ):將游標移動到下一個句子的開頭。
  • {:將游標移動到前一個段落。
  • }:將游標移動到下一個段落。
  • |:將游標移動到指定的列(由count指定)。
  • +:將游標移動到下一行的第一個非空白字元處。
  • -:將游標移動到之前一行的第一個非空白字元處。
  • _:將游標移動到當前行的第一個非空白字元處。
  • 0:將游標移動到當前行的第一列。
  • B:將游標回移一個字,跳過punctuation。
  • E:將游標向前移動到一個字的結尾,跳過punctuation。
  • G:跳到由count指定的行處。如果沒有指定數目,就跳轉到檔案的末尾。
  • H:將游標移動到螢幕頂端的第一個非空白字元處。
  • L:將游標移動到螢幕底端的第一個非空白字元處。
  • M:將游標移動到螢幕中間的第一個非空白字元處。
  • W:將游標向前移動到一個字的開頭,跳過punctuation。
  • b:將游標回移一個字。如果游標在字的中間,就將游標移動到那個字的第一個字元處。
  • e:將游標前移一個字。如果游標在字的中間,就將游標移動到那個字的最後一個字元處。
  • h:將游標向左移動一個字元的位置。
  • j:將游標向下移動一行。
  • k:將游標向上移動一行。
  • l:將游標向右移動一個字元的位置。
  • w:將游標向前移動一個字。如果游標在字的中間,就將游標移動到下一個字的第一個字元處。

在螢幕上移動游標

  • ^E:向前滾動一行。用count指定滾動的行數。
  • ^Y:向後滾動一行。用count指定滾動的行數。
  • z:用以下選項重畫螢幕。“z<回車>”將當前行放到螢幕的頂部;“z.”將當前行放到螢幕的中間;“z-”將當前行放到螢幕的底部。如果你在“z”命令之前指定一個數字,它就將當前行變到指定的行處。例如,“16z.”將第16行放到螢幕的中間。

替換文字

  • C:從當前游標位置處變到行的結尾。
  • R:用輸入的一系列字元(以Esc鍵結尾)替換螢幕上的字元。S:改變一整行。
  • c:改變直到。“cc”改變當前行。用count指定改變的行數。
  • r:替換游標下的一個字元。用count指定替換的字元數。
  • s:替換(Substitute)游標下的一個字元,並進入插入模式。用count指定替換的字元數。在最後一個替換的字元處放一個美元($)符號。

搜尋文字或字元

  • ,:在相反方向上重複上一個f,F,t或T命令。
  • /:在檔案裡向下搜尋/之後的字串。
  • ;:重複上一個f,F,t或T命令。
  • :在檔案裡向上搜尋之後的字串。
  • F:在當前行向後搜尋“F”命令指定的字元。如果找到了,就將游標移動到那個位置。
  • N:重複由“/”或“”給出的搜尋,不往相反方向搜尋。
  • T:在當前行向後搜尋“F”命令指定的字元。如果找到了,就移動到那一列。
  • f:在當前行搜尋“f”命令之後指定的字元。如果找到了,就將游標移動到那個位置。
  • n:重複上一個“/”或“”搜尋。
  • t:在當前行搜尋“t”命令之後指定的字元。如果找到了,就將游標移動到那個字元位置之前的一列。

操縱字元/行格式

  • ~:轉換游標之下的字元事例(Switch the case of thecharacter under the cursor)。
  • <:Shift the lines up towhere to the left by one shiftwidth. “<<” shifts the currentline to the left,and can be specified with a count。
  • >:Shift the lines up towhere to the right by one shiftwidth. “>>” shifts the currentline to theright, and can be specified with a count。
  • J:將當前行和下一行合併起來。用count指定合併的行數。

儲存與退出

  • ^\:退出“VI”模式,進入“EX”模式。EX編輯器是行編輯器,VI就是建立在其上的。重新進入VI的EX命令是“:vi”。
  • Q:退出“VI”模式,進入“EX”模式。ex編輯器是一個逐行(line-by-line)編輯器。重新進入VI的EX命令是“:vi”。
  • ZZ:退出編輯器,如果有任何改動就儲存。

其它一些指令

  • ^G:顯示當前的檔名和狀態。
  • ^L:清除並重畫螢幕。
  • ^R:重畫螢幕並移除假的行。
  • ^[:退出鍵。取消部分形成的命令。
  • ^^:回到上次編輯的檔案處。
  • !:執行一個shell。如果指定了a,使用!執行的程式將特定的行作為標準輸入,同時也會替換帶執行程式的標準輸出的那些行。“!!”將當前行作為輸入來執行一個程式。例如,“!4jsort”會從當前游標位置拿掉五行並執行sort。在鍵入命令之後,會有一個你可以輸入命令的單獨的exclamation點。
  • &:重複之前的“:s”命令。
  • .:重複最後一次修改檔案的那個命令。
  • ::開始輸入一個EX編輯器命令。當使用者輸入回車的時候,此命令馬上執行。
  • @:輸入在特定快取中儲存的命令。
  • U:將當前行恢復到游標進入行之前的狀態。
  • m:用“m”命令之後的特定字元來標記當前位置。
  • u:撤銷對檔案所作的最後一次修改。再次輸入“u”會恢復修改。

EX命令

VI編輯器建立在另外一個叫做EX的編輯器之上。EX編輯器只通過行來編輯。在VI編輯器中,用:命令來開始鍵入一個EX命令。以下的列表並不完全,但是給出的命令是用得比較多的。如果用某些命令(如“:s”和“:w”)來修改不止一行,在命令之前必須指定範圍。例如,要替換掉從第3行到第15行的內容,命令是“:3,15s/from/this/g”。

:abstring strings

縮寫。如果在VI中輸入一個與strings相關的字,編輯器會自動插入相應的字。例如,縮寫“:ab usa United States ofAmerica”會在輸入“usa”的時候插入字“United States of America”。

:mapkeys new-seq

對映。此命令將一個關鍵字或一個關鍵字序列對映到另外一個關鍵字或一個關鍵字序列。

:q

退出VI。如果對內容有任何改動,編輯器會發出一個警告資訊。

:q!

不儲存而退出VI。

:s/pattern/to_pattern/options

替換。此命令用to_pattern中的字串替換指定的pattern。如果沒有引數(選項),此命令只是替換第一個出現的pattern。如果給定了“g”,所有出現的pattern都會被替換掉。例如,命令“:1,$s/Dwayne/Dwight/g”會替換掉將所有出現的“Dwayne”替換為“Dwight”。

:set[all]

給VI和EX設定一些個性化的選項。“:set [all]”命令給出了所有可能的選項。

:unastring

移除之前由“:ab”定義的縮寫。

:unmkeys

移除由“:map”定義的移除對映。

:vifilename

開始編輯一個新檔案。如果沒有儲存對內容作出的改動,編輯器會給出一個警告。

:w

寫出當前檔案。

:wfilename

將快取寫到指定的檔名。

:w>> filename

將快取的內容追加到檔案中。

:wq

寫快取並退出。

相關文章