Vim 好用的 ex 命令 筆記


建立時間: 2023年7月19日 01:31
更新時間: 2024年10月8日 08:54

說明

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 意思,跟符號數相同。

如果 +- 前為空,使用當前行,也就是 .+

01- 相同,都是放在檔案開頭。

幫助文件 :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

在命令列視窗可以查看之前輸入過的命令,並且還可以編輯它們。

開啟

  1. 在命令列模式裡,用 cedit 選項所指定的鍵。在沒有置位 compatible 的情況下,預設值是 CTRL-F
  2. 在普通模式裡,用 q: 命令。
  3. 在普通模式裡,用 q/q? 命令,開啟之前搜尋字串的命令。

執行

移動到之前輸入過的命令,按 <CR> 會執行該命令。

視窗模式

在命令列視窗左下角 [Command Line] 狀態列的下一行會顯示目前處於哪種模式。

  • : 表示輸入的命令
  • / 表示正向搜尋的命令
  • ? 表示反向搜尋的命令

錯誤碼 E11

命令列視窗不是普通的視窗。你不能移動到別的視窗或編輯別的緩衝區。在命令列視窗裡,所有此類操作都被禁止。


Ex 裡的特殊字元

查看幫助: :help cmdline-special

在 Ex 命令中,下列字元在可以使用檔案名稱的地方有特殊的意義。


%

被目前檔名取代。


#
被替換檔案名稱取代,每個視窗都會分別記住,範例如下。

#n
(n 是數字) 被第 n 個緩衝區的檔名取代。

#0
# 相同。

##
被參數列表 (:args) 裡的所有檔案名稱 (使用空格符號分隔) 取代。檔案名稱中的空格符號前面會加上一個反斜線。

#<n
(n 是一個正數) 被第 n 個舊檔名取代。要得到這個數值,請見 :oldfilesv: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 相同,但每行之前顯示行號。


: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]。

觀看次數: 814
exvim命命
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!