跳轉至內容

Ict-innovation/LPI/103.8

來自華夏公益教科書,開放的書籍,開放的世界

103.8 使用 Vi

[編輯 | 編輯原始碼]

考生應該能夠使用 vi 編輯文字檔案。這個目標包括 vi 導航、基本 vi 模式、插入、編輯、刪除、複製和查詢文字。


關鍵知識領域

  • 使用 vi 導航文件。
  • 使用基本 vi 模式。
  • 插入、編輯、刪除、複製和查詢文字。

在大多數 Linux 發行版中,vi 是首選的文字編輯器。它被認為是一個必不可少的管理員工具,如 grepcat


為了執行復雜的操作,如複製/貼上,vi 可以以不同的模式執行。

命令模式

這是編輯和導航模式。命令通常只是一個字母。例如,使用 j 跳轉到下一行。

根據經驗,如果你想多次執行操作,你可以在命令前加上一個數字。例如 10j 將跳轉 10 行。

在某些情況下,鍵盤上的箭頭鍵無法正確對映,仍然可以使用 h j k l 命令進行導航,效果如下


最後一行(或列)模式

你可以透過在命令模式下輸入冒號 : 來進入此模式。該列將出現在螢幕的左下角。在此模式下,你可以執行簡單的搜尋操作、儲存、退出或執行 Shell 命令。


插入模式

在命令模式下進入此模式的最簡單方法是使用 ia。此模式最直觀,主要用於互動式地將文字輸入文件。


Esc 鍵將退出 插入模式 並返回 命令模式

文字項

[編輯 | 編輯原始碼]

單詞、句子和段落等專案是在 命令模式 中定義的,以便在不使用滑鼠的情況下將編輯命令應用於文字文件。

單詞、句子和段落
eb 移動到當前單詞的 end/beginning。
() 移動到當前句子的開頭/結尾。
{} 移動到當前段落的開頭/結尾。
w 類似於 e,但包括單詞後的空格。
開頭和結尾


^ 行首
$ 行尾
1G 檔案開頭
G 檔案結尾

所有這些文字項都可以用來一次一個單詞 (w) 或一個段落 (}) 地遍歷文字,轉到行首 (^),檔案結尾 (G) 等。還可以使用這些文字項來執行刪除和複製等命令。


插入文字

在命令模式下,輸入 i 就可以互動式地將文字輸入文件。和其他所有 vi 功能一樣,還有很多其他的方法可以做到這一點。下表列出了用於進入插入模式的命令。

插入命令
a 在游標位於行尾字元的最後位置時追加文字。
A 在游標位於行尾字元的最後位置時追加文字。
i 在當前位置插入文字。
o 在下面的一行插入文字。
O 在上面的一行插入文字。
s 刪除當前字元並插入。
S 刪除當前行並插入。


在修改文件時,一個非常有用的選項是在進入插入模式之前刪除要替換的那部分文字。這可以透過 更改 c 命令來實現。與本節中的其他命令一樣,c 會將你置於 INSERT 模式,但你可以指定要在之前刪除的文字部分。例如

c$

將刪除從當前游標位置到行尾的所有文字。

另一個用於替換單個字元(僅此而已!)的命令是 r。首先選擇要替換的字元並將游標置於該字元上。接下來按 r,然後輸入一個新字元。新字元將替換舊字元。此命令將使編輯器處於 COMMAND 模式,而不是 INSERT 模式!


剪下和貼上

如果你想在命令模式下刪除單個字元,可以使用 x。使用 dd 刪除當前行。然後可以使用 p 命令貼上已刪除的專案。

注意:幾乎所有 vi 命令都可以透過在命令前指定一個數字來重複。你還可以將命令應用於文字項(如單詞、句子、段落...),方法是在命令後放置該實體。

示例

dw 刪除一個單詞。

d$ 刪除從這裡到當前行尾的文字。

d} 刪除從這裡到當前段落結尾的文字。


你可以使用 c 命令同時刪除一個專案並切換到插入模式。與往常一樣,你可以將此命令與文字項(如 w{)一起使用。


複製和貼上

vi 中的複製操作是命令 y(表示 yank,字母 c 已經用於 更改),貼上操作仍然是 p

如果整行被 yanked,則貼上的文字將插入在游標下面的下一行。

文字選擇是使用熟悉的文字項 wl}$ 等來完成的... 有一些例外,比如最後一個例子。


示例


y$ 複製從這裡到當前行尾的文字。

yy 複製整個當前行。

3yy 複製 3 行。


 最近刪除的專案始終被緩衝,可以使用 p 命令貼上。這相當於剪下和貼上操作。


搜尋和替換

由於搜尋涉及模式匹配,我們再次處理正則表示式(regex)。像 grepsed 等許多 UNIX 文字操作工具一樣,vi 也識別正則表示式。

要執行搜尋,必須處於 COMMAND 模式。/(正斜槓)命令向前搜尋,? 命令向後搜尋。

還可以執行搜尋和替換操作。語法類似於 sed


示例

/\<comp 向下搜尋文字中所有以 'comp' 開頭的單詞。

?^z 向上搜尋以字母 z 開頭的行。

:% s/VAR/var 在整個文字中搜索關鍵字 'VAR' 並將其替換為 'var'。

撤消和重做

在這個階段值得一提的是,你始終可以撤消更改!這必須在 COMMAND 模式下使用 u 命令完成(只要尚未儲存檔案即可)。重做命令是 ^R

執行 Shell 命令

[編輯 | 編輯原始碼]

LASTLINE 模式下,感嘆號 ! 後面的所有內容都被解釋為 Shell 命令。

例如,在編輯 lilo.conf 或 grub.conf 時,你可能需要找出根裝置的名稱。這可以透過以下方式完成

:!df /

儲存並退出

儲存命令是 :w。預設情況下,整個文件都會被儲存。在某些情況下,vi 會拒絕儲存對文件所做的更改,因為許可權不足。在這種情況下,可以使用 :w! 強制寫入。

還可以為檔案指定另一個名稱。文字的部分可以儲存到另一個檔案中,而其他檔案可以讀取並貼上到當前文件中。以下是一些示例,說明了這一點。

示例

:w newfile - 將當前文件儲存為 'newfile'。

:w 15,24 extract - 將第 15 行到第 24 行儲存到名為 'extract' 的檔案中。

:r extract - 從檔案 'extract' 中讀取。文字將貼上到游標處。

警告 - 在 列模式 上下文中,我們有以下內容

. - 是當前行

$ - 是文件的結尾


以下是退出 vi 的不同方法

:wq - 儲存並退出。

:q! - 退出,但不儲存更改。

:x - 退出並在存在更改時儲存。

:quit - 與 :q 相同。

:exit:e - 與 :x 相同。

ZZ - 與 :x 相同。



使用過的檔案、術語和工具

  • vi
  • /, ?
  • h,j,k,l
  • i, o, a
  • c, d, p, y, dd, yy
  • ZZ, :w!, :q!, :e!


上一章 | 下一章

華夏公益教科書