歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 掌握VI編輯器 基礎教程

掌握VI編輯器 基礎教程

日期:2017/3/2 9:44:01   编辑:關於Linux

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的兩種模式

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:將光標向前移動一個字。如果光標在字的中間,就將光標移動到下一個字的第一個字符處。

Copyright © Linux教程網 All Rights Reserved