Vim 好用的 ex 命令 筆記
分類
說明
ex 命令是 vim 內部執行的命令,以 : 開頭,本篇將分享一些好用的 ex 命令。
備註
- [] 代表選填,可不填
- 外殼 shell 是執行命令的介面,就像終端打指令一樣。
[++opt]
跟開啟檔案格式有關。
++fileformat={value}
換行符號格式
選項 | 換行符號 |
---|---|
dos |
<CR><NL> |
unix |
<NL> |
mac |
<CR> |
範例
++fileformat=unix
換行符號使用 unix 格式
[+cmd]
參數可以用來在新打開的文件定位光標或執行任何其他命令:
命令 | 說明 |
---|---|
+ |
從最後一行開始。 |
+{num} |
從第 {num} 行開始。 |
+/{pat} |
從匹配 {pat} 的第一行開始。 |
+{command} |
打開新文件以後執行 {command} 。 |
{command}
可以是任何 Ex 命令。
{pat}
就是 pattern 匹配。
[range]
這被稱作 [range]
(範圍)。 它由一個或多個被 ,
或 ;
分割的行限定字元組成。
當範圍被 ;
分割時,在解釋下一個行限定符之前,遊標的位置會被設定為前一個行限定符確定的行值。也就是 :100;+3
一定會假設游標位置是100,即使目前游標位置不是100。
命令 | 說明 |
---|---|
:1,3 |
第1到3行。 |
:2,+3 |
第2行到當前行的後三行。 |
:2;+3 |
第2行到第2行的後三行。 |
特殊符號
行號可以用下列符號限定:
符號 | 說明 |
---|---|
. |
當前行 |
$ |
文件的最後一行 |
% |
相當於 1,$ (整個文件) |
/{pattern}[/] |
下一個匹配 {pattern} 的行 |
幫助文件 :help :range
位移
這些符號後面可以跟著 (一個或多個) +
或 -
和一個可選的數字。該數字會與前面的行號相加或相減。若該數字省略,則認為是1,同 +1
。
++
或 --
就是 +2
和 -2
意思,跟符號數相同。
如果 +
或 -
前為空,使用當前行,也就是 .+
。
0
與 1-
相同,都是放在檔案開頭。
幫助文件 :help :range-offset
範例
:.,$
當前行到結尾
:1,.
1到當前行
:%
所有行
:.,.+10
當前行到當前行後10行
:.,+5
當前行到當前行後5行,.
省略
:1,$-2
1到最後一行-2行
:+,++
下一行到下下一行。
:2,3co0
將2到3行複製到檔案開頭
Range Pattern
查看幫助文件 :help :range-pattern
使用 pattern
匹配模式當作範圍。
範例
:/pattern/d
刪除下一個包含 pattern 的行。
:/pattern/+d
刪除下一個包含 pattern 的下一行。
:/pattern1/,/pattern2/d
從第一個包含 pattern1 的行刪除到第一個包含 pattern2 的行。
:.,/pattern/d
從當前行刪除到第一個包含 pattern 的行。
反向搜尋,將 / 換成 ? 即可。
{address}
指定行號,用法同 [range]
。
[x]
可自訂暫存器,也可忽略使用默認的暫存器,關於暫存器請參考 Vim 暫存器。
| 分割命令
查看幫助文件 :help :bar
|
可以用來分割命令,所以你可以在一行裡輸入多個命令。如果你想在參數裡使用 |
,應在前面加上 \
。
範例:
:1,3d | g/a
刪除1到3行,顯示有 a 的行內容。
命令列補全
幫助文件 :help cmdline-completion
在編輯命令列的時候,有一些指令可以用來補全遊標前面的單字。
以下是可以使用的指令:
CTRL-D
列出與遊標前面的模式所匹配的名字。
'wildchar'
選項
用遊標前的模式完成匹配。匹配的項目 (如果有多項匹配,則選第一項) 會插入並取代模式。大致上就是按 <Tab>
自動補全的功能。
命令歷史記錄
在命令模式按上下方向鍵,會顯示最近使用的命令,越往上越之前。按 <CR>
會執行該命令,如果要使用之前輸入過的命令會很方便。
命令列視窗
查看幫助文件 :help c_CTRL-F
在命令列視窗可以查看之前輸入過的命令,並且還可以編輯它們。
開啟
- 在命令列模式裡,用
cedit
選項所指定的鍵。在沒有置位compatible
的情況下,預設值是CTRL-F
。 - 在普通模式裡,用
q:
命令。 - 在普通模式裡,用
q/
或q?
命令,開啟之前搜尋字串的命令。
執行
移動到之前輸入過的命令,按 <CR>
會執行該命令。
視窗模式
在命令列視窗左下角 [Command Line]
狀態列的下一行會顯示目前處於哪種模式。
:
表示輸入的命令/
表示正向搜尋的命令?
表示反向搜尋的命令
錯誤碼 E11
命令列視窗不是普通的視窗。你不能移動到別的視窗或編輯別的緩衝區。在命令列視窗裡,所有此類操作都被禁止。
Ex 裡的特殊字元
查看幫助: :help cmdline-special
在 Ex 命令中,下列字元在可以使用檔案名稱的地方有特殊的意義。
%
被目前檔名取代。
#
被替換檔案名稱取代,每個視窗都會分別記住,範例如下。
#n
(n 是數字) 被第 n 個緩衝區的檔名取代。
#0
與 #
相同。
##
被參數列表 (:args
) 裡的所有檔案名稱 (使用空格符號分隔) 取代。檔案名稱中的空格符號前面會加上一個反斜線。
#<n
(n 是一個正數) 被第 n 個舊檔名取代。要得到這個數值,請見 :oldfiles
或 v:oldfiles
。
命令
:#
:[range]# [count] [flags]
和 :number
相同。
範例
1,3#
顯示1到3行內容。
:=
:= [flags]
顯示末行的行號。
:{range}= [flags]
顯示 {range}
範圍內最後一行的行號。
範例
:=
列印總行數。
:.=
列印當前行號。
:!{cmd}
:!{cmd}
在外殼裡執行 {cmd}
命令,命令完成後會返回 vim。
:[range]!{cmd}
指定範圍執行 {cmd}
,其輸出結果將替代原有的內容。
:copy
:[range]co[py] {address}
把 [range]
指定的行複製到 {address}
給出的行之下。
範例
:1,3co4
複製1到3行到第4行之下。
:delete
:[range]d[elete] [x]
刪除 [range]
範圍的行 (預設: 目前行) [到暫存器 x 裡]。
範例
:1,3d
刪除1到3行。
:help
<Help>
或
:h[elp]
開啟一個視窗並以唯讀方式顯示幫助文件。
:h[elp] {subject}
類似 :help
,但附加跳到 {subject}
標籤上。
例如: :help options
獲取特定幫助
如果查找特定類型的幫助,可以通過前綴進一步指定上下文:
類別 | 前綴 | 例子 |
---|---|---|
普通模式指令 | 無 | :help x |
可視模式指令 | v_ | :help v_u |
插入模式指令 | i_ | :help i_<Esc> |
命令列模式指令 | : | :help :quit |
命令列編輯 | c_ | :help c_<Del> |
選項 | ‘ | :help 'textwidth' |
:move
:[range]m[ove] {address}
把 [range]
指定的行移到 {address}
給出的行之下。
範例
:1,3m4
將1到3行移動到第4行之下。
:number
:[range]nu[mber] [count] [flags]
和 :print
相同,但每行之前顯示行號。
:[range]p[rint] {count} [flags]
顯示 {count}
行,從 [range]
指定的範圍開始。
:put
:[line]pu[t] [x]
放置文字 [從暫存器 x
] 在行號 [line]
(默認為目前行) 之後。
:read
:r[ead] [++opt] [name]
在遊標下方插入檔案 [name]
(預設: 當前檔案)。
:{range}r[ead] [++opt] [name]
在指定行下方插入檔案 [name]
(預設: 當前檔案)。
:[range]r[ead] [++opt] !{cmd}
執行 {cmd} 並將它的標準輸出插入到遊標下方。
範例:
:0r /path/to/file
在檔案開頭插入 /path/to/file
的內容。
:$r /path/to/file
在檔案結尾插入 /path/to/file
的內容。
:shell
:sh[ell]
該命令啟動一個外殼。外殼退出後 (執行完 exit
命令或按 <Ctrl-d>
),你會回到 Vim。
:t
和 :copy
等價,此命令在 Vim9 腳本裡不支持,因為它太容易和變數名稱混淆了。
建議記住 :copy
就好。
:yank
:[range]y[ank] [x]
抽出 [range]
所指定的行 [到暫存器 x
]。
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!