學習 vi 編輯器/vi 參考
|
學習 vi 編輯器: 熟悉 — 基本任務 — 使你的工作更輕鬆 — 高階任務 — 細節 — Vi 克隆 (Vim – 基本導航 – 模式 – 提示和技巧 – 程式設計師需要了解的有用資訊 – 增強 Vim – Vim 在 Windows 上 – VimL 指令碼語言, Vile, BB vi) — vi 參考 |
以下約定在本參考中使用。
- <c>
- 單個字元,例如 'a' 或 '1'。
- <ESC>, <Ctrl-[>
- 表示應按下鍵盤上的 Escape (Esc) 鍵,它與 Control 和 '[' 相同。
- <CR>
- 表示應按下回車鍵。
- <TAB>
- 表示應按下 Tab 鍵
- <Ctrl-x>, <C-x>
- 表示應同時按下 Control 鍵和 'x' 鍵。'x' 可以是鍵盤上的幾乎任何其他鍵。
- <Shift-x>, <S-x>, <X>
- 表示應同時按下 Shift 鍵和 'x' 鍵
- <Meta-x>, <M-x>
- 表示應同時按下 Meta 或 Alt 鍵和 'x' 鍵。
- :quit, :q
- Ex 命令。以 <:> 開頭,後跟命令,最後以 <CR> 結尾。對於許多 Ex 命令,存在長形式 (:quit) 和短形式 (:q)。
- :set nocompatible
- 表示設定。
- strlen ()
- 表示函式。
- /pattern/, ?pattern?
- 搜尋模式。vi 中的搜尋模式是 正則表示式。
- :ranges/search/replace/options, :global /pattern/ delete
- 搜尋模式與 Ex 命令組合。
vi 中的所有命令都區分大小寫。
| c | 單個字元,例如 'a' 或 '1'。 |
| m | 單個小寫字母,用於標記文字。 |
| string | 多個字元,例如 'abc bed'。 |
| pattern | 用於搜尋的字串,可能包含正則表示式。例如 'abc' 或 '^ab[123]'。 |
| myfile | 要編輯的檔案的名稱。 |
| vi myfile | 開啟檔案 myfile 進行編輯。如果檔案不存在,將建立一個新檔案。可以同時開啟多個檔案。 |
| vi +line myfile | 開啟檔案 myfile,並將游標定位在給定的行。
|
| vi +/string/ myfile | 開啟檔案 myfile,並將游標定位在包含該字串的第一行。如果字串包含空格,則應將其括在引號中。
|
| vi -r | 列出檔案的恢復副本。如果 vi 會話被殺死或系統崩潰,則將儲存恢復副本。 |
| vi -r myfile | 開啟檔案 myfile 的恢復副本。 |
| view myfile | view 是 vi 的只讀版本。所有 vi 命令(包括更改檔案的命令)都是允許的,並且與 vi 中的行為相同。不同之處在於,正常嘗試儲存、ZZ 或 :wq 無法正常工作。相反,需要使用 :x! 或 :w。 |
vi 可以設定在大多數系統上使用鍵盤移動按鈕,例如 游標左、頁面上、主頁、刪除 等。
| <G> | 移動到檔案的最後一行。可以加一個表示要移動到的行的數字,<1><G> 移動到檔案的首行。 |
| <h> | 向左移動一個字元,或游標左。可以加一個數字,<5><h> 向左移動 5 個位置。 |
| <j> | 向下移動一行,或游標下。可以加一個數字,<5><j> 向下移動 5 行。 |
| <k> | 向上移動一行,或游標上。可以加一個數字,5k 向上移動 5 行。 |
| <l> | 向前移動一個字元,或游標右。可以加一個數字,5l 向右移動 5 個位置。 |
| <H> | 移動到螢幕頂部的行。 |
| <M> | 移動到螢幕中間的行。 |
| <L> | 移動到螢幕底部的行。 |
| <-> | 移動到上一行的第一個非空格字元。可以加一個數字。
|
| <+> | 移動到下一行的第一個非空格字元。可以加一個數字。
|
| <CR> | 與 <+> 相同。 |
| <|> | 必須加一個數字。移動到當前行的指定列。
|
| <w> | 移動到下一個單詞的開頭,該單詞可能在下一行。 |
| <W> | 與 w 相同,但會考慮標點符號。 |
| <e> | 移動到當前單詞的結尾,或者如果在單詞之間或在單詞的結尾,則移動到下一個單詞的結尾。 |
| <E> | 與 e 相同,但會考慮標點符號。 |
| <b> | 向後移動到當前單詞的開頭,或者如果在單詞之間或在單詞的開頭,則移動到前一個單詞的開頭。 |
| <B> | 與 b 相同,但會考慮標點符號。 |
| <f>c | 找到同一行上字元 c 的第一次出現。 可以使用 <;> 或 <,>(反向方向)重複此命令。
|
| <F>c | 與 f 相同,但反向。 |
| <t>c | 找到同一行上字元 c 的第一次出現之前的字元。 |
| <T>c | 與 t 相同,但反向,將游標放置在字元 c 之後。 |
| <0> | 移動到當前行的開頭。 |
| <^> | 移動到當前行的第一個非空格字元。 |
| <$> | 移動到當前行的結尾。 |
| <Ctrl-F> | 向前移動一頁。
|
| <Ctrl-B> | 向後移動一頁。
|
| <Ctrl-D> | 向前移動半頁。 |
| <Ctrl-U> | 向後移動半頁。 |
| <Ctrl-E> | 在螢幕底部顯示多一行。 |
| <Ctrl-Y> | 在螢幕頂部顯示多一行。 |
所有插入命令將 vi 置於 插入模式。 插入模式 由 ESC 鍵終止。
| <i> | 在游標位置進入 插入模式。 |
| <I> | 在當前行的開頭進入 插入模式。 |
| <a> | 在游標後進入 插入模式,或追加。 |
| <A> | 在當前行的末尾進入 插入模式,或追加到當前行的末尾。 |
| <o> | 在當前行下方插入新行,然後進入 插入模式。 |
| <O> | 在當前行上方插入新行,然後進入 插入模式。 |
| r | 用接下來輸入的字元替換游標下的字元。 可以用數字開頭,5ra 用字母 a 替換 5 個字元。 |
| R | 進入 替換模式。 每輸入一個字母,它都會替換游標下的字母,游標移動到下一個字元。 替換模式 由 ESC 鍵終止。 可以用數字開頭,5Rab 後跟 ESC 將游標下的字元替換為 a,下一個字元替換為 b,然後插入另外 4 個 ab。 原始行被放入緩衝區,替換任何已經存在的文字。 |
每次使用刪除命令時,被刪除的文字都會被放入緩衝區,替換任何已經存在的文字。 緩衝區中的文字可以透過 p 或 P 檢索。
| dd | 刪除當前行。 可以用數字開頭。
|
| de | 從游標下的字元刪除到單詞的末尾。 可以用數字開頭。
|
| dE | 與 de 相同,但會考慮標點符號。 |
| dw | 從游標下的字元刪除到下一個單詞的開頭。 可以用數字開頭。
|
| dW | 與 dw 相同,但會考慮標點符號。 |
| db | 從游標左側刪除到前一個單詞的開頭。 可以用數字開頭。
|
| dB | 與 db 相同,但會考慮標點符號。 |
| dtc | 從游標位置刪除到第一個字元的前面。
|
| dfc | 從游標位置刪除到第一個字元(包括字元 c)。
|
| dG | 刪除當前行和所有到檔案末尾的內容。 |
| d/string | 從游標刪除到字串,向前或向後。 |
| D | 從游標刪除到行末。 |
| d$ | 與 D 相同。 |
| d^ | 從游標左側刪除到行首。 |
| x | 刪除游標下的字元。 可以用數字開頭。
|
| X | 刪除游標左邊的字元,但不會刪除行末標記或下一行的任何字元。 可以用數字開頭。
|
更改命令都選擇要刪除的文字,文字的末尾用 $ 表示。 進入插入模式,新文字覆蓋或擴充套件文字。 當按 <ESC> 鍵終止插入時,任何剩餘的原始文字都會被刪除。
在更改期間刪除的文字被放入緩衝區,替換任何已經存在的文字。 緩衝區中的文字可以透過 p 或 P 檢索。
| C | 從游標位置更改到行末。 可以用數字開頭。
|
| cM | 通常與 dMi 相同,其中 M 是任何移動命令。 |
| cc | 更改當前行。 可以用數字開頭。
|
| ce | 更改當前單詞。 可以用數字開頭。
|
| cw | 與 ce 完全相同。 此命令與通常的 vi 移動不一致:cw 和 ce 與 dei 相同,但 dwi 還刪除到下一個單詞的所有空格。 |
| ctc | 從游標位置更改到第一個字元(不包括字元 c)。
|
| cfc | 從游標位置更改到第一個字元(包括字元 c)。 |
| cG | 從當前行的開頭更改到檔案末尾。 |
| s | 更改游標下的字元。 可以用數字開頭。
|
| S | 更改整行。 與 ddO(大寫字母 "O")相同。 |
yank 命令將文字複製到 vi 緩衝區。 文字還透過刪除和更改命令複製到緩衝區。 put 或 place 命令從緩衝區檢索文字。
| yy | 將當前行復制到緩衝區。 可以用數字開頭。
|
| Y | 與 yy 相同。 |
| yw | 將從游標到下一個單詞開頭的文字複製到緩衝區。 可以用數字開頭。
|
| p | 如果緩衝區包含整行,則它們被插入到當前行的後面。 如果它只包含字元,則它們被插入到游標的後面。 |
| P | 如果緩衝區包含整行,則它們被插入到當前行的前面。 如果它只包含字元,則它們被插入到游標的前面。 |
搜尋使用 正則表示式。
| /pattern/ | 搜尋字串,它可能是正則表示式。 搜尋從游標位置向下進行,在第一個匹配項處停止。 如果沒有找到,它將從檔案的開頭繼續到游標位置。 尾部的斜槓字元是可選的。
|
| /pattern/+ | 轉到包含搜尋字串的行後的行。
|
| /pattern/e | 將游標停留在 pattern 匹配的字串的最後一個字元上。* 透過在 e 後面新增 +num 或 -num,你可以提供一個字元偏移量,指定游標停留在的位置。 例如:/foo/e+3 將使游標停留在 foo 下一次出現的 3 個字元之後。* 透過使用 b 而不是 e,你可以指定從匹配字串的開頭起的字元偏移量。 |
| /\cpattern/ | 進行不區分大小寫的搜尋。 |
| ?pattern? | 與 /pattern/ 相同,但向上搜尋。 尾部的問號字元是可選的。 |
| ?pattern?- | 轉到包含搜尋字串的行上面的行。
|
| <n> | 重複上次搜尋。 |
| <N> | 重複上次搜尋,但方向相反。 |
| <f>char | 在當前行上向前搜尋 char 的下一個出現位置。 |
| <F>char | 在當前行上向後搜尋 char 的下一個出現位置。 |
| <t>char | 在當前行上向前搜尋下一個出現的char,並將游標停留在char之前的字元上。 |
| <T>char | 在當前行上向後搜尋下一個出現的char,並將游標停留在char之後的字元上。 |
| <;> | 重複上一次f或F搜尋。 |
| <,> | 與<;>類似,但方向相反。 |
搜尋和替換使用正則表示式和Ex命令:substitute (簡寫為 :s),其語法類似於sed實用程式 - 這並不奇怪,sed,Ex 和w:Vi 有共同的起源 - Ed 編輯器。
| :.s/pattern/replacement/ | 將當前行中pattern的第一個出現替換為replacement。* 如果pattern包含\(和\),它們將用於記住它們之間匹配的內容,而不是匹配括號字元。例如,:.s/\(\d*\)-\(\d*\)/\2:\1/可以匹配字串12345-6789並將其替換為6789:12345。 |
| :.s/pattern/replacement/g | 將當前行中所有出現的pattern替換為replacement。 |
| :%s/pattern/replacement/g | 將整個檔案中所有出現的pattern替換為replacement。 |
| :x,ys/pattern/replacement/g | 將第x行到第y行中所有出現的pattern替換為replacement。* 例如::14,18s/foo/bar/g 將第14行到第18行中所有出現的foo替換為bar。
|
以下元字元在替換模式中具有特殊含義
| & | 被與搜尋模式匹配的文字替換。 |
| \n | 被\(和\)之間的與搜尋模式匹配的文字替換,其中n在1到9的範圍內,\1被第一個集合的匹配替換。 |
| \u | 將下一個字元大寫(如果該字元是字母)。 |
| \l | 將下一個字元小寫(如果該字元是字母)。 |
| \U | 開啟大寫模式,所有後續字元都將大寫。 |
| \L | 開啟小寫模式,所有後續字元都將小寫。 |
| \E | 關閉大寫或小寫模式。 |
| \e | 關閉大寫或小寫模式。 |
例如,.:s/\(foo\) \(bar\) \(baz\)/\u\1 \U\2\E \3/可以匹配字串foo bar baz並將其替換為Foo BAR baz。
標記的行可以在更改或刪除文字時使用。
| <m>m | 用字母標記當前行。
|
| <'>m | 移動到用字母標記的行。
|
| <Ctrl-L> | 重新整理螢幕。 |
| z<CR> | 重新整理螢幕,使當前行位於頂部。可以前面加上行號。
|
| /pattern/z | 找到包含string第一個出現位置的行,然後重新整理螢幕,使該行位於頂部。 |
| z. | 重新整理螢幕,使當前行位於螢幕中央。可以前面加上行號,在這種情況下,該行將位於中央。zz 序列也具有相同的效果。
|
| /string/z. | 找到包含string第一個出現位置的行,然後重新整理螢幕,使該行位於中央。 |
| z- | 重新整理螢幕,使當前行位於底部。可以前面加上行號,在這種情況下,該行將位於底部。
|
| /string/z- | 找到包含string第一個出現位置的行,然後重新整理螢幕,使該行位於底部。 |
| <~> | 更改游標下字元的大小寫,並移動到下一個字元。可以前面加上數字,因此5~ 將更改 5 個字元的大小寫。 |
| <.> | 重複上一次插入或刪除操作。可以前面加上數字,dd 後面加上5. 將刪除一行,然後刪除另外 5 行。 |
| <%> | 將游標移動到匹配的括號,可以是 (), [] 或 {} 中的任何一個。 |
| <Ctrl-G> | 臨時在螢幕底部顯示狀態行。 |
| :f | 與 <Ctrl-G> 相同。 |
| <J> | 將下一行連線到當前行的末尾。可以前面加上數字。1J 和2J 與J 具有相同的操作。
|
| <u> | 撤銷上一次更改。 |
| <U> | 撤銷對當前行的所有更改。 |
| <Ctrl-Z> | 將vi置於後臺,即控制權將返回到作業系統。在 UNIX 中,可以使用fg 將vi 會話返回到前臺。 |
| <Z><Z> | 儲存並退出。它象徵著睡眠,表示工作的結束。 |
| :quit :q |
退出,但前提是沒有進行過任何更改。 |
| :quit! :q! |
不儲存退出,無論是否進行過任何更改。 |
| :write :w |
儲存當前檔案,但不退出。
|
| :write!filename :w!filename |
儲存到該檔案,覆蓋任何現有內容。 |
| :wq :write|quit |
儲存並退出。 |
| :exit :xit :x |
儲存並退出。 |
| :exit! :xit! :x! |
用於在view 中儲存並退出。 |
| :e filename | 退出當前檔案並開始編輯命名檔案。 |
| :e + filename | 退出當前檔案並開始編輯命名檔案,並將游標置於檔案末尾。
|
| :e! | 關閉當前檔案,丟棄所有未儲存的更改,並重新開啟該檔案以進行編輯。 |
| :e# | 退出當前檔案並開始編輯上一個檔案。 |
| :n | 當命令列中引用了多個檔案時,開始編輯下一個檔案。 |
| :n files | 重置:n 的檔案列表。當前檔案將被關閉,列表中的第一個檔案將被開啟以進行編輯。 |
| :r filename | 讀取檔案,即插入檔案。
|
所有選項都是ex 選項,因此需要在前面加上冒號。
預設選項可以放在使用者主目錄中的名為.exrc 的檔案中。此檔案中的選項前面沒有冒號,例如:
- set ic
| :set all | 顯示當前的所有設定。 |
| ! 啟用 | ! 停用 | ! 含義 |
| :set ignorecase :set ic |
:set noignorecase :set noic | 忽略大小寫。使搜尋不區分大小寫。 |
| :set list | :set nolist | 顯示控制字元。<Ctrl-I> 是製表符,$ 是換行符。 |
| :set number :set nu |
:set nonumber :set nonu | 開啟行號。 |
| :set term | 顯示終端型別。 | |
| :set autoindent :set ai |
:set noautoindent :set noai | 在插入模式下,按下 <CR> 會自動縮排行。 |
| :set hlsearch | :set nohlsearch | 突出顯示由 /term/ 匹配的搜尋結果。這是一個視覺輔助工具。 |
ex 命令
[edit | edit source]ex 命令以 : 開頭,這會將 vi 進入 最後一行模式,在螢幕的最後一行輸入。
| :! command | 執行指定的系統命令,然後返回到 vi。
|
| :sh | 啟動一個 shell。exit 返回到 vi 會話。 |
| :vi | 退出 最後一行模式 並返回到正常的 命令模式。 |
ex 行命令
[edit | edit source]這些命令編輯行,並具有以下語法:
- 沒有行號,表示在當前行操作。
- 帶有 %,表示對所有行操作。
- 一對行號,例如 '3,5',表示對第 3 行到第 5 行(包含)進行操作。任何一個數字都可以用 . 替換,表示當前行,或者用 $ 表示最後一行。因此 .,$ 表示從當前行到檔案末尾,1,$ 表示與 % 相同。此外,可以使用簡單的算術運算,所以 .+1 表示當前行的下一行,$-5 表示最後一行之前的 5 行。
| co | 複製,後面跟著要複製到的行的位置。
|
| d | 刪除。
|
| m | 移動,後面跟著要移動到的行的位置。
|
對映 / 重新對映 vi 命令
[edit | edit source]| :map | 在 vi 命令模式下建立新的命令或覆蓋現有的命令。
|
| :map! | 在命令模式和插入模式下建立新命令。
|
外部連結
[edit | edit source]
|
學習 vi 編輯器: 熟悉 — 基本任務 — 使你的工作更輕鬆 — 高階任務 — 細節 — Vi 克隆 (Vim – 基本導航 – 模式 – 提示和技巧 – 程式設計師需要了解的有用資訊 – 增強 Vim – Vim 在 Windows 上 – VimL 指令碼語言, Vile, BB vi) — vi 參考 |