Nvim 的 :help
頁面,是從 原始碼 使用 tree-sitter-vimdoc 解析器產生的。
<Insert>
鍵,您可以在插入和覆蓋字元之間切換。:cnoremap <C-A> <Home> :cnoremap <C-F> <Right> :cnoremap <C-B> <Left> :cnoremap <Esc>b <S-Left> :cnoremap <Esc>f <S-Right>(<> 表示法 <>;請照字面輸入所有這些)
CTRL-V
通常映射到貼上文字。請改用 CTRL-Q
。 c_CTRL-QCTRL-V
相同。但某些終端機將其用於控制流程,因此它可能無法運作。CTRL-V
完全相同,但不要嘗試將 CTRL 修飾符包含在鍵中。<Left>
游標向左。請參閱 'wildmenu' 以了解在 wildmenu 補全模式下的行為。 c_<Right> c_Right <Right>
游標向右。請參閱 'wildmenu' 以了解在 wildmenu 補全模式下的行為。 c_<S-Left><S-Left>
或 <C-Left>
c_<C-Left><S-Right>
或 <C-Right>
c_<C-Right><Home>
c_CTRL-B c_<Home> c_Home 游標移至命令列的開頭。CTRL-E 或 <End>
c_CTRL-E c_<End> c_End 游標移至命令列的結尾。請參閱 'wildmenu' 以了解在 wildmenu 補全模式下的行為。<BS>
刪除游標前面的字元。 c_<Del> c_Del <Del>
刪除游標下的字元(在行尾:游標前的字元)。 c_CTRL-W:cnoremap <C-U> <C-E><C-U>
{char1}
<BS>
{char2}
或 c_digraph{char1}
{char2}
c_CTRL-K{char1}
是特殊鍵時,該鍵的程式碼會以 <> 形式插入。{register}
c_CTRL-R c_<C-R> 插入已編號或已命名暫存器的內容。在輸入 CTRL-R
和第二個字元之間,將顯示 '"',表示您應該輸入暫存器的名稱。文字會以您輸入的方式插入,但不會使用映射和縮寫。但不會觸發透過 'wildchar' 進行的命令列補全。並且會逐字插入結束命令列的字元 (<Esc>
、<CR>
、<NL>
、<C-C>
)。不過,<BS>
或 CTRL-W
仍然可以結束命令列,剩餘的字元將以另一種模式解譯,這可能不是您想要的。特殊暫存器:'"' 未命名暫存器,包含最後一次刪除或複製的文字 '%' 目前的檔案名稱 '#' 替代檔案名稱 "*" 剪貼簿內容 (X11: 主要選取) '+' 剪貼簿內容 '/' 最後一次搜尋模式 ':' 最後一個命令列 '-' 最後一次小刪除(小於一行) '.' 最後一次插入的文字 c_CTRL-R_=<C-R><C-R>=setcmdpos(2)[-1]<CR>
CTRL-R
CTRL-R
在之後設定位置。CTRL-F
c_CTRL-R_CTRL-F c_<C-R>_<C-F> CTRL-R CTRL-P
c_CTRL-R_CTRL-P c_<C-R>_<C-P> CTRL-R CTRL-W
c_CTRL-R_CTRL-W c_<C-R>_<C-W> CTRL-R CTRL-A
c_CTRL-R_CTRL-A c_<C-R>_<C-A> CTRL-R CTRL-L
c_CTRL-R_CTRL-L c_<C-R>_<C-L> 插入游標下的物件:CTRL-F
游標下的檔案名稱 CTRL-P
游標下的檔案名稱,使用 'path' 展開,如同 gf 中一樣 CTRL-W
游標下的 Word CTRL-A
游標下的 WORD;請參閱 WORD CTRL-L
游標下的行CTRL-W
時,已輸入的單字部分不會再次插入。CTRL-R
{register CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L}
CTRL-R CTRL-O
{register CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L}
插入暫存器或游標下的物件。其運作方式與 c_CTRL-R 類似,但會逐字插入文字。例如,如果暫存器 a 包含 "xy^Hz"(其中 ^H 是退格鍵),則 "CTRL-R a" 會插入 "xz",而 "CTRL-R CTRL-R
a" 會插入 "xy^Hz"。CTRL-\
e {expr}
c_CTRL-\_e{expr}
並將整個命令列替換為結果。系統會提示您輸入表達式,輸入 <Enter>
以完成。它在映射中最有用。請參閱 expression。請參閱 c_CTRL-R_= 以插入表達式的結果。有用的函式包括 getcmdtype()、getcmdline() 和 getcmdpos()。游標位置不會改變,除非游標在行尾,那麼它會保持在行尾。setcmdpos() 可以用來設定游標位置。 sandbox 用於評估表達式,以避免不良的副作用。範例:cmap <F7> <C-\>eAppendSome()<CR> :func AppendSome() :let cmd = getcmdline() .. " Some()" :" place the cursor on the ) :call setcmdpos(strlen(cmd)) :return cmd :endfunc
CTRL-Y
作為字元。請參閱 'wildmenu' 以了解在 wildmenu 完成模式下的行為。CTRL-[
c_CTRL-[ c_<Esc> c_Esc <Esc>
當輸入且 'x' 不在 'cpoptions' 中時,退出命令列模式而不執行。在巨集或當 'x' 在 'cpoptions' 中時,開始輸入的命令。注意: 如果您鍵盤上的 <Esc>
鍵很難按下,請訓練自己使用 CTRL-[
。c_META c_ALT 如果未映射該組合鍵,則 ALT (META) 可能會像 <Esc>
一樣運作。例如,如果 <A-x>
沒有命令列模式映射,則 <A-x>
的行為會像 <Esc>
x。c_CTRL-C<Up>
從歷史記錄中調用較舊的命令列,其開頭與當前命令列匹配(見下文)。請參閱 'wildmenu' 以了解在 wildmenu 完成模式下的行為。c_<Down> c_Down <Down>
從歷史記錄中調用較新的命令列,其開頭與當前命令列匹配(見下文)。請參閱 'wildmenu' 以了解在 wildmenu 完成模式下的行為。<S-Up>
或 <PageUp>
從歷史記錄中調用較舊的命令列 c_<S-Down> c_<PageDown> <S-Down>
或 <PageDown>
從歷史記錄中調用較新的命令列CTRL-^
切換語言 :lmap 映射和/或輸入法的使用。當為搜尋命令輸入模式且 'imsearch' 不為 -1 時,VAL 是 'imsearch' 的值,否則 VAL 是 'iminsert' 的值。當定義語言映射時CTRL-^
開啟後,新狀態不會再次用於下一個命令或搜尋模式。<Up>
和 <Down>
鍵將目前的命令列作為搜尋字串。將下一個/上一個命令列的開頭與此字串進行比較。第一個匹配的行是新的命令列。當重複輸入這兩個鍵時,會再次使用相同的字串。例如,這可以用來找到先前的替代命令:輸入「:s」,然後輸入 <Up>
。也可以透過多次輸入 <S-Up>
,直到顯示所需的命令列來完成。(注意:移位的箭頭鍵並非在所有終端上都有效){name}
] [{first}
][, [{last}
]] 列出歷史記錄 {name}
的內容,它可以是:c[md] 或 : 命令列歷史記錄 s[earch] 或 / 或 ? 搜尋字串歷史記錄 e[xpr] 或 = 表達式暫存器歷史記錄 i[nput] 或 @ 輸入行歷史記錄 d[ebug] 或 > 除錯命令歷史記錄 a[ll] 以上全部{first}
和/或 {last}
,則會列出歷史記錄中相應範圍的項目。這些數字可以用以下形式指定: :history-indexing:history / 6,12
:history all -2
:history all -2,:keepp[atterns]
{command}
:keepp :keeppatterns 執行 {command}
,而不將任何內容新增至搜尋歷史記錄,並且在 :s 或 :& 的情況下,不修改最後的替代模式或替代字串。<Tab>
或 <Esc>
大多數用作 'wildchar',並且這些在某些巨集中具有特殊含義。)再次輸入時,如果有多个匹配项,则会插入下一个匹配项。在最后一个匹配项之后,会再次使用第一个匹配项(循环)。可以使用 'wildmode' 選項來變更行為。c_<S-Tab><S-Tab>
類似於 'wildchar' 或 <Tab>
,但從最後一個匹配項開始,然後移至上一個匹配項。c_CTRL-NCTRL-L
會從目前匹配項的結尾新增一個字元。如果設定了 'ignorecase' 和 'smartcase' ,且命令列沒有大寫字元,則新增的字元會被轉換為小寫。c_CTRL-G /_CTRL-G CTRL-G 當設定 'incsearch' 時,輸入 "/" 或 "?" 的搜尋模式,目前的匹配項會顯示出來,然後按下 CTRL-G
會移動到下一個匹配項 (不考慮 search-offset)。使用 CTRL-T
移動到上一個匹配項。提示:在一般鍵盤上,T 在 G 的上方。c_CTRL-T /_CTRL-T CTRL-T 當設定 'incsearch' 時,輸入 "/" 或 "?" 的搜尋模式,目前的匹配項會顯示出來,然後按下 CTRL-T
會移動到上一個匹配項 (不考慮 search-offset)。使用 CTRL-G
移動到下一個匹配項。提示:在一般鍵盤上,T 在 G 的上方。:cnoremap X <C-L><C-D>(其中 X 是要使用的命令鍵,
<C-L>
是 CTRL-L
,而 <C-D>
是 CTRL-D
)這會找到最長的匹配項,然後列出所有匹配的檔案。:set wildmode=longest,list這會在第一次按下 'wildchar' 時找到最長的匹配項,然後在下一次按下時列出所有匹配的檔案。
CTRL-N
或 CTRL-P
來取得其他匹配項。所有檔案都會包含在內,包括副檔名與 'suffixes' 選項匹配的檔案。:e *.c$這不會匹配結尾為 ".cpp" 的檔案。若沒有 "$" 則會匹配。
<S-Tab>
來表示 CTRL-P
,請將此命令放入您的 .cshrc 中xmodmap -e "keysym Tab = Tab Find"並將此放入您的 vimrc 中
:cmap <Esc>[1~ <C-P>
:set ai "set 'autoindent' option無法將註解新增至 shell 指令 ":!cmd" 或 ":map" 指令以及其他一些指令 (主要是需要運算式的指令),它們會將 '"' 視為其引數的一部分。
:execute 'r !ls' | '[有一個例外:當 'cpoptions' 中存在 'b' 旗標時,對於 ":map" 和 ":abbr" 指令及其相關指令,需要使用
CTRL-V
而不是 '\'。您也可以改用 "<Bar>"。另請參閱 map_bar。:!ls | wc view the output of two commands :r !ls | wc insert the same output in the text :%g/foo/p|> moves all matching lines one shiftwidth :%s/foo/bar/|> moves one line one shiftwidth :map q 10^V| map "q" to "10|" :map q 10\| map \ l map "q" to "10\" and map "\" to "l" (when 'b' is present in 'cpoptions')您也可以使用
<NL>
來分隔指令,方式與使用 '|' 相同。若要插入 <NL>
,請使用 CTRL-V
CTRL-J
。將會顯示 "^@"。使用 '|' 是較佳的方法。但是,對於外部指令,必須使用 <NL>
,因為外部指令中會包含 '|'。若要避免 <NL>
的特殊含義,必須在其前面加上反斜線。範例:r !date<NL>-join這會將目前的日期讀入檔案,並將其與前一行連接。
:| print current line (like ":p") :3| print line 3 (like ":3p") :3 goto line 3範圍和指令名稱之間允許使用冒號。它會被忽略 (這是 Vi 相容)。例如
:1,$:s/pat/string當預期會有檔案名稱的位置使用字元 '%' 或 '#' 時,它們會展開為目前和替代的檔案名稱 (請參閱「編輯檔案」章節 :_% :_#)。
CTRL-V
跳脫。請注意,":next" 指令會使用空格來分隔檔案名稱。跳脫空格以將它們包含在檔案名稱中。範例:next foo\ bar goes\ to school\開始編輯三個檔案 "foo bar"、"goes to" 和 "school "。
5;/that line/
{number}
一個絕對行號 E1247。當前行 :.{pattern}
的行 :/{pattern}
的行 :? 另請參閱 :range-pattern 下文。\/ 下一個符合先前使用過的搜尋模式的行。 \? 前一個符合先前使用過的搜尋模式的行。\& 下一個符合先前使用過的替換模式的行。:3,4+2print在以下文字中:
:2,4-1print在以下文字中:
/pat1//pat2/ Find line containing "pat2" after line containing "pat1", without moving the cursor. 7;/pat2/ Find line containing "pat2", after line 7, leaving the cursor in line 7.
{number}
必須介於 0 和檔案中的行數之間。當使用 0(零)時,大多數指令會將其解譯為 1。將其用作計數的指令會將其用作零 (:tag, :pop 等)。某些指令會將零解譯為「第一行之前」(:read、搜尋模式等)。.+3 three lines below the cursor /that/+1 the line below the next line containing "that" .,$ from current line until end of file 0;/that the first line containing "that", also matches in the first line. 1;/that the first line after line 1 containing "that"某些指令允許在指令後加上計數。此計數會用作要使用的行數,從最後一個行指定符給定的行開始(預設值是游標行)。接受計數的指令是那些使用範圍但不具有檔案名稱引數的指令(因為檔案名稱也可以是數字)。計數不能為負數。
:s/x/X/g 5 substitute 'x' by 'X' in the current line and four following lines :23d 4 delete lines 23, 24, 25 and 26摺疊與範圍
:.,.+(count - 1)換句話說:游標處和之後的「計數」行。範例:要刪除三行
3:d<CR> is translated into: .,.+2d<CR>
CTRL-R
指令。例如,"%" 代表當前檔案名稱,而 CTRL-R
% 會立即插入當前檔案名稱。請參閱 c_CTRL-R。:!ls "%" :r !spell "%"若要避免 '%' 和 '#' 的特殊含義,請在其前面插入反斜線。詳細說明:當前面有反斜線時,特殊含義始終會被轉義,無論有多少反斜線。
<cword>
會被游標下的單字取代 (如同 star) :<cWORD> <cWORD> <cWORD>
會被游標下的 WORD 取代 (請參閱 WORD) :<cexpr> <cexpr> <cexpr>
會被游標下的單字取代,包含更多組成 C 語言的表達式。例如,當游標在 "ptr->arg" 的 "arg" 上時,結果會是 "ptr->arg";當游標在 "list[idx]" 的 "]" 上時,結果會是 "list[idx]"。 :<cfile> <cfile> <cfile>
會被游標下的路徑名稱取代 (如同 gf 所使用) :<afile> <afile> <afile>
當執行自動指令時,會被操作的緩衝區檔案名稱或讀取或寫入的檔案取代。 E495 :<abuf> <abuf> <abuf>
當執行自動指令時,會被目前有效的緩衝區編號取代。並非所有事件都會設定,另請參閱 bufnr()。對於 ":r file" 和 ":so file",它是目前的緩衝區,讀取/來源的檔案不在緩衝區中。 E496 :<amatch> <amatch> <amatch>
當執行自動指令時,會被觸發此自動指令的匹配項取代。 E497 當檔案名稱不用於匹配時,它與 <afile>
不同 (用於 FileType、Syntax 和 SpellFileMissing 事件)。當匹配是使用檔案名稱時,它會展開為完整路徑。 :<sfile> <sfile> <sfile>
當執行 :source
指令時,會被來源檔案的檔案名稱取代。 E498 當執行函數時,會被呼叫堆疊取代,如同 <stack>
(這是為了向後相容,建議使用 <stack>
或 <script>
)。請注意,當 <sfile>
未在腳本內使用時,檔案名稱修飾符無效。 :<stack> <stack> <stack>
會被呼叫堆疊取代,使用 "function {function-name}
[{lnum}
]" 表示函數行,並使用 "script {file-name}
[{lnum}
]" 表示腳本行,且項目之間以 ".." 分隔。例如:"function {function-name1}
[{lnum}
]..{function-name2}[{lnum}
]"。如果沒有呼叫堆疊,則會產生錯誤 E489 。 :<script> <script> <script>
當執行 :source
指令時,會被來源檔案的檔案名稱取代。當執行函數時,會被定義該函數的腳本檔案名稱取代。如果無法確定檔案名稱,則會產生錯誤 E1274 。 :<slnum> <slnum> <slnum>
當執行 :source
指令時,會被行號取代。 E842 當執行函數時,它是相對於函數起始位置的行號。 :<sflnum> <sflnum> <sflnum>
當執行腳本時,會被行號取代。它與 <slnum>
的不同之處在於,<sflnum>
在任何情況下都會被腳本行號取代。 E961:!dir <cfile>:S :call system('chmod +w -- ' . expand('%:S'))範例,當檔案名稱為 "src/version.c" 時,目前目錄為 "/home/mool/vim"
:p /home/mool/vim/src/version.c :p:. src/version.c :p:~ ~/vim/src/version.c :h src :p:h /home/mool/vim/src :p:h:h /home/mool/vim :t version.c :p:t version.c :r src/version :p:r /home/mool/vim/src/version :t:r version :e c :s?version?main? src/main.c :s?version?main?:p /home/mool/vim/src/main.c :p:gs?/?\\? \home\mool\vim\src\version.c範例,當檔案名稱為 "src/version.c.gz" 時
:p /home/mool/vim/src/version.c.gz :e gz :e:e c.gz :e:e:e c.gz :e:e:r c :r src/version.c :r:e c :r:r src/version :r:r:r src/version
% current file name %< current file name without extension # alternate file name for current window #< idem, without extension #31 alternate file number 31 #31< idem, without extension <cword> word under the cursor <cWORD> WORD under the cursor (see |WORD|) <cfile> path name under the cursor <cfile>< idem, without extension注意: 在預期檔案名稱的地方,會執行萬用字元展開。在 Unix 上,shell 用於此用途,除非可以在內部完成 (為了提高速度)。反引號也有效,如同
:n `echo *.c`但是,只有在展開 '%'、'#' 等之前有任何萬用字元時,才會執行展開。這樣可以避免展開檔案名稱內的萬用字元。如果您想展開
<cfile>
的結果,請向其中新增萬用字元。範例:(替代檔案名稱為 "?readme?") 指令會展開為:e # :e ?readme? :e `ls #` :e {files matching "?readme?"} :e #.* :e {files matching "?readme?.*"} :cd <cfile> :cd {file name under cursor} :cd <cfile>* :cd {file name under cursor plus "*" and then expanded}另請參閱 `=。
<CR>
執行游標下的命令列。無論是在插入模式還是一般模式下都適用。CTRL-C 在命令列模式中繼續。游標下的命令列會被用作命令列。無論是在插入模式還是一般模式下都適用。沒有重新繪製,因此視窗會保持可見。:quit 捨棄命令列並返回一般模式。":close"、CTRL-W
c、":exit"、":xit" 和 CTRL-\
CTRL-N
也會起作用。:qall 關閉 Vim,除非某些緩衝區有變更。:qall! 關閉 Vim,捨棄對任何緩衝區的變更。<CR>
執行的那行之外,任何對其他行的變更都會遺失。:autocmd CmdwinEnter * map <buffer> <F5> <CR>q:
<Tab>
,並且命令列視窗用於 Ex 命令,則會新增兩個映射,以在命令列視窗中使用 <Tab>
進行補全,如下所示:inoremap <buffer> <Tab> <C-X><C-V> :nnoremap <buffer> <Tab> a<C-X><C-V>請注意,在一般模式下按下
<Tab>
會對下一個字元進行補全。這樣它就可以在行尾工作。如果你不想要這些映射,請使用以下方式停用它們au CmdwinEnter [:>] iunmap <buffer> <Tab> au CmdwinEnter [:>] nunmap <buffer> <Tab>你可以將這些行放入你的 vimrc 檔案中。
autocmd CmdWinEnter [:>] syntax sync minlines=1 maxlines=1
:au CmdwinEnter : let b:cpt_save = &cpt | set cpt=. :au CmdwinLeave : let &cpt = b:cpt_save這會將 'complete' 設定為在目前視窗中使用 i_CTRL-N 進行補全。另一個範例
:au CmdwinEnter [/?] startinsert這會使 Vim 在命令列視窗中以插入模式啟動。
-
:insert 或 :append 的文字