最詳細的 Vi 編輯器使用指南
引言
VI編輯器是一個被許多Unix用戶使用的基于屏幕的編輯器。VI編輯器具備強大的功能來幫助程序員, 但是許多初學者因為要面對很多不同的指令而對使用VI敬而遠之。寫作本教程的目的就是要幫助初學者適應VI編輯器的使用,當然,也有一些小節的內容與VI 的慣用者有關。在講解的同時舉出了很多的例子,最佳的學習方法就是試著在Unix下運行這些例子,并試著舉一反三。在這個世界上,沒有比自己親自去經歷更 好的學習方式了。
約定
在本教程中,使用以下的約定:
^X表示一個控制字符。例如,如果你在教程中看到:^d,其意是你按下了ctrl鍵,然后敲入了相應的字母。對于本例來說,你就按下ctrl鍵,然后敲d。
開始之前
VI編輯器使用全屏幕,因此了解你使用的是何種類型的終端是有必要的。當你登錄的時候,wiliki會問你的終端是什么。提示信息像這個樣子:TERM = (vt100)。
如果你知道自己的終端是一個vt100(或者一個能夠當作vt100用的模擬器),在你登錄的時候,就為終端類型敲擊回車鍵。如果你有一個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模式。系統會提醒你已經在此模式下了。
#p#
如何在命令模式下輸入命令
命令(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會發出嘟嘟聲, 這是在提示你沒有發現配對的符號。
#p#
文字與字符搜索
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`。
如果大小是錯誤的,編輯器不會正常運行。如果你對于屏幕尺寸存在任何疑問,可以向計算機實驗室的管理員求助,他會幫你設置正確的尺寸。
#p#
VI命令的總結
以下是按照功能分類的VI命令的一個總結列表。有可能還會有其它命令,可以查看VI的在線手冊。為了方便,你可以以文本文件方式保存該文件,然后刪除你認為自己不會用的一些命令,并打印出剩下的較短的文件。
剪切與粘貼/刪除文字
-
“:指定一個任何命令使用的緩存。在”之后輸入一個字母或數字,它們會對應一個緩存。
-
D:從當前光標所在位置向后刪除直到行尾。
-
P:在當前光標位置或行之前粘貼專門的緩存。如果沒有指定緩存(使用”命名),“P”就使用通用緩存。
-
X:刪除光標之前的字符。
-
Y:將當前行整形到指定的緩存。如果沒有指定緩存,就使用通用緩存。
-
d:刪除,直到where。“dd”刪除當前行。一個數字就表示刪除那么多行。被刪除的內容放置在由”命令指定的緩存中。如果沒有指定緩存,就使用通用緩存。
-
p:在當前光標位置或行之后粘貼專門的緩存。如果沒有指定緩存(使用”命名),“p”就使用通用緩存。
-
x:刪除光標之下的字符。輸入一個數字表示要刪除多少字符。被刪除的字符位于光標之后。
-
y:整形,將結果放到一個緩存中。“yy”整形當前行。輸入一個數字表示要整形的行數??梢杂?rdquo;命令來指定緩存。如果沒有指定緩存,就使用通用緩存。
插入新的文字
-
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
寫緩存并退出。