UNIX vi 編輯器使用向?qū)?/h1>

2018-08-12 22:12 更新

vi 編輯器使用向?qū)?/h2>

在 UNIX 操作系統(tǒng)中,文檔編輯器有很多種,其中最友好的工具就是 vi. 該文檔編輯器可以讓用戶在文件中基于上下文執(zhí)行編輯操作。

現(xiàn)在,用戶可以使用 vi 文檔編輯器的升級版 VIM.這里的 VIM 中的 M 就是源自改善的意思。

vi 通常會被認(rèn)為是 UNIX 編輯器的實(shí)施標(biāo)準(zhǔn),原因如下:

  • 幾乎在所有 UNIX 系列操作系統(tǒng)中都有效。
  • 它的具體實(shí)現(xiàn)都非常的類似。
  • 僅僅占用非常少的資源。
  • 與其他編輯器相比,用戶界面更加友好。

用戶可以使用 vi 編輯器來編輯已經(jīng)存在的文件,當(dāng)然也可以使用它創(chuàng)建一個新的文件。此外,用戶也可以使用它來瀏覽一個文本文件。

開始使用 vi 編輯器

用戶可以通過下面幾種方法來開啟 vi 編輯器:

指令 描述
vi filename 如果文件不存在,則創(chuàng)建這個文件,否則打開這個文件
vi -R filename 以只讀的方式打開一個已存在的文件
view filename 以只讀的方式打開一個已存在的文件

下面是一個創(chuàng)建新文件 testfile 的例子,當(dāng)然,前提是該文件在當(dāng)前目錄內(nèi)不存在。

    $vi testfile

然后用戶會在屏幕上看到如下顯示:

    |
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~
    "testfile" [New File]  

此時,應(yīng)該注意到的是在每一行都的開頭都會有一個波浪號(~),這個波浪號代表該行并沒有被使用。如果某一行沒有以波浪號開頭,那么這就意味著有空格存在,也可能是換行符或其他的不易看見的符號。

所以,在我們正式使用 vi 編輯器之前,讓我們理解一些微小但是很重要的。

操作模式

使用 vi 編輯器時通常會在下面兩個模式之間來回切換:

  • 指令模式:該模式下,用戶可以完成一些諸如保存文件、執(zhí)行指令、移動光標(biāo)、剪切或粘貼某行(字符)、查找或替代的管理功能。在該模式下,用戶鍵入的所有內(nèi)容都會被系統(tǒng)當(dāng)做指令來執(zhí)行。
  • 插入模式:該模式下,用戶可以往文件內(nèi),鍵入文本。在該模式下,用戶鍵入的所有內(nèi)容都會被當(dāng)做是文件輸入而最后保存在文本中。

vi 編輯器通常會以指令模式打開。如果用戶希望鍵入文本的話,用戶必須把當(dāng)前模式切換為插入模式。切換模式到插入模式時,用戶可以簡單的按 i 鍵。離開插入模式,可以按 Esc 鍵。

值得注意的是,如果用戶不清楚當(dāng)前處于哪種模式,用戶可以按兩次 Esc 鍵,編輯器就會回到指令模式。用戶可以使用 vi 編輯器打開一個文本,并且鍵入一些字符,然后切換到指令模式,體驗(yàn)一下這前后的差別。

離開 vi 編輯器

離開 vi 編輯器的指令是 :q 。在指令模式下,一旦鍵入冒號后跟字母 q,再單擊回車。如果文檔有修改的話,編輯器會報(bào)出提示。如果不想看到這樣的提示信息,用戶可以使用 :q!。這個指令可以在不保存更改的情況下離開 vi 編輯器。

保存文檔的指令時 :w。用戶可以將其與上述的離開指令融合在一起使用,比如 :wq,然后單擊回車。

保存文件更新且退出的最快捷的方法就是 ZZ 指令。當(dāng)用戶在指令模式下鍵入 zz 指令后,效果等同于 :wq。

用戶也可以通過再 :w 后指定特定的文件名來指定不同的文件名來保存。比如,如果用戶希望將文件保存為 filename2,用戶可以鍵入:w filename2, 然后點(diǎn)擊回車。

在文件內(nèi)移動光標(biāo)

為了在文件內(nèi)不影響文本內(nèi)容的情況下移動光標(biāo),用戶必須在指令模式(連續(xù)兩次按下 Esc 鍵)下來操作。下面是文件內(nèi)移動光標(biāo)的相關(guān)指令:

指令 描述
k 向上移動一行
j 向下移動一行
h 將光標(biāo)往左移動一個字符
l 將光標(biāo)往右移動一個字符

下面是兩個需要注意的重點(diǎn):

  • vi 編譯器是大小寫敏感的,所以用戶在指令模式下進(jìn)行操作時要注意大小寫。
  • 大部分 vi 編輯器中的指令都可以通過在動作行為前加個數(shù)字來表明希望發(fā)生的次數(shù)。比如,2j 意味著希望光標(biāo)往下移動兩行。

還有其他一些在文件內(nèi)移動光標(biāo)的方法。需要格外注意的是必須在指令模式下來操作。下面是其他在文件內(nèi)移動光標(biāo)的方法。

指令 描述
0 或 l 光標(biāo)回到行首
$ 光標(biāo)回到行末尾
w 光標(biāo)移動到下一個字
b 光標(biāo)移動到前一個字
( 光標(biāo)移動到當(dāng)前句子的開頭
) 光標(biāo)移動到下個句子的開頭
E 光標(biāo)移動空白分割單詞的末尾
{ 光標(biāo)往后移動一段
} 光標(biāo)往前移動一段
[[ 光標(biāo)往后移動一節(jié)
]] 光標(biāo)往前移動一節(jié)
n| 光標(biāo)移動到當(dāng)前行的n列
1G 光標(biāo)移動到文件的第一行
G 光標(biāo)移動到文件的最后一行
nG 光標(biāo)移動到文件的第 n 行
:n 光標(biāo)移動到文件的第 n 行
fc 光標(biāo)往前移動到 c
Fc 光標(biāo)往后移動到 c
H 光標(biāo)移動到屏幕的首部
nH 光標(biāo)移動到屏幕從頂部查第 n 行
M 光標(biāo)移動到屏幕的中間
L 光標(biāo)移動到屏幕的底部
nL 光標(biāo)移動到從屏幕底部往上第 n 行
:x 光標(biāo)移動到行號為 x 的行

Control指令

下面是一些和 Control 鍵配合使用的指令:

指令 描述
CTRL+d 向前移動半個屏幕
CTRL+f 向前移動整個屏幕
CTRL+u 向后移動半個屏幕
CTRL+b 向后移動整個屏幕
CTRL+e 屏幕往上移動一行
CTRL+y 屏幕往下移動一行
CTRL+u 屏幕往上移動半個頁面
CTRL+f 屏幕往下移動一個頁面
CTRL+l 重繪屏幕

編輯文件

只有在插入模式下才可以對文本進(jìn)行編輯。從指令模式切換為插入模式可以有很多種方法:

指令 描述
i 當(dāng)前位置前插入文本
I 當(dāng)前行首插入文本
a 當(dāng)前位置后插入文本
A 當(dāng)前行末尾插入文本
o 在光標(biāo)位置下方新建一行來輸入文本
a 在光標(biāo)位置上方新建一行來輸入文本

刪除字符

下面是關(guān)于用來在打開的文件中刪除字符或行的指令列表:

指令 描述
x 刪除光標(biāo)位置下的字符
X 刪除光標(biāo)位置前的字符
dw 刪除光標(biāo)位置到下一個字間的所有字符
d^ 刪除光標(biāo)位置到行首間的所有字符
d$ 刪除光標(biāo)位置到行末尾間的所有字符
D 刪除光標(biāo)位置到當(dāng)前行末尾間的所有字符
dd 刪除一整行

正如前面所述,vi 中的大部分指令都可以在前面加數(shù)字來表示希望執(zhí)行的次數(shù)。比如,2x 意味著會刪除當(dāng)前光標(biāo)位置下的兩個字符,2dd 意味著刪除兩行。

本教程建議在學(xué)習(xí)后面相關(guān)內(nèi)容前可以多多練習(xí)以上內(nèi)容。

更改指令

用戶可以在不刪除文本的情況下對字符、字和行進(jìn)行更改。下面是相關(guān)指令:

指令 描述
cc 刪除當(dāng)前行,僅留下用戶鍵入的文本
cw 刪除光標(biāo)所在的單詞,并進(jìn)入插入模式
r 替換掉光標(biāo)下的字符,vi 在替換結(jié)束后回到指令模式
R 覆寫當(dāng)前光標(biāo)處的多個字符,只有使用 Esc 才可以停止覆寫
s 將當(dāng)前字符替換為用戶鍵入的字符,之后,仍處于插入模式
S 刪除光標(biāo)所在行,替換為用戶鍵入的文本,之后,系統(tǒng)仍處于插入模式

復(fù)制和粘貼指令

用戶可以從一個地方復(fù)制一行或一個字,然后粘貼到其他地方,相關(guān)指令如下:

指令 描述
yy 復(fù)制當(dāng)前行
yw 復(fù)制當(dāng)前字
p 在光標(biāo)后粘貼
P 在光標(biāo)前粘貼

高級指令

有一些高級的指令可以簡化日常編輯操作:

指令 描述
J 當(dāng)前行與下一行想連接,定義一個數(shù)字可以連接好多行
當(dāng)前行往左跳轉(zhuǎn),一個 shift 的寬度
>> 當(dāng)前行往右跳轉(zhuǎn),一個 shift 的寬度
~ 當(dāng)前光標(biāo)下,大小寫切換
U 將當(dāng)前行重新回到光標(biāo)剛到這里的狀態(tài)
u 撤銷該文件的最后一個更改,再次鍵入u就是重新實(shí)現(xiàn)更新
:f 在屏幕上顯示當(dāng)前光標(biāo)的半分比、文件名級文件總數(shù)
:f filename 重命名當(dāng)前文件到 filename
:w filename 寫到文件 filename
:e filename 打開另一個文件 filename
:cd dirname 切換當(dāng)前目錄到目錄 dirname
:e # 在兩個已打開的文件間切換
:n 用戶在使用 vi 打開多個文件的情況下,使用該指令一次切換到下一個文件
:p 用戶在使用 vi 打開多個文件的情況下,使用該指令一次切換到上一個文件
:N 用戶在使用 vi 打開多個文件的情況下,使用該指令一次切換到下一個文件
:r file 讀取文件 file,然后在當(dāng)前行的后面進(jìn)入插入模式
:nr file 讀取文件 file,然后在當(dāng)前行的后面n行進(jìn)入插入模式

字或字符搜索

vi 編輯器有兩種搜索方式:字符串和字符。對于字符串搜索,需要使用到 / 指令。當(dāng)用戶開始鍵入這些指令的時候,這些指令就會顯示在屏幕的底部,這樣,用戶就可以加入指定的字符串來進(jìn)行搜索了。

這兩個指令僅僅在搜索方向上有所不同:

  • / 指令是從上往下搜索。
  • 指令時從下往上搜索。

n 和 N 指令用于以同樣或相反的方向重復(fù)上述搜索指令。在搜索指令中,一些字符串擁有特殊的意義。就需要使用轉(zhuǎn)意符(\)。

指令 描述
^ 在行的首部開始搜索
. 匹配單個字符
* 匹配0個或更多個前面的字符
$ 在行末尾開始搜索
[ 啟動一個匹配或者不匹配的表達(dá)式
在表達(dá)式中,來找到一個字的開頭或結(jié)尾
> 參考上面的

集指令

用戶可以通過如下指令來改變 vi 界面的外觀和友好程度:set 指令。下述指定必須在指令模式下鍵入。

指令 描述
:set ic 搜索的時候忽略大小寫
:set ai 設(shè)置自動縮進(jìn)
:set noai 不設(shè)置自動縮進(jìn)/td>
:set nu 在左側(cè)顯示行號
:set sw 設(shè)置制表符的寬度。比如,:set sw=4 意味著將制表符寬度設(shè)置為4
:set ws 如何循環(huán)搜索被設(shè)置,則如果在文件底部沒有搜索到,會重新從文件開頭開始搜索。
:set wm 如果這個選項(xiàng)有一個值大于零,編輯器會“自動換行”。
:set ro 更改文件讀寫類型為只讀
:set term 輸出終端類型
:set bf 忽略控制字符

運(yùn)行指令

vi 編輯器可以運(yùn)行指令集。為此,用戶必須在指令模式下輸入 :! 指令。

比如,如果用戶在保存文件前,希望檢測文件是否已存在,那么用戶可以鍵入 :! ls ,然后用戶就看以在屏幕上看到 ls 指令的的輸出。

按任意鍵后,會回到 vi 界面。

替換文本

:s/ 指令可以快速替換字或者一組字。下面是語法:

    :s/search/replace/g

g 代表全局。該指令的意思就是出現(xiàn)在光標(biāo)所在行的所有匹配字符都會被替換。

注意

下面是使用 vi 編輯器時的重要提示:

  • 用戶必須在指令模式下來鍵入指令(連續(xù)按兩次 Esc 鍵,來保證當(dāng)前處于指令模式)。
  • 用戶要注意指令的大小寫。
  • 用戶只能在插入模式下來鍵入文本。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號