Nvim 的 :help
頁面,使用 tree-sitter-vimdoc 解析器,從 來源產生而來。
CTRL-V
。要插入 <Nul>
字元,請使用 "CTRL-V CTRL-@
" 或 "CTRL-V 000"。在某些系統上,您必須使用 "CTRL-V 003" 來插入 CTRL-C
。注意:當 CTRL-V
被映射時,您通常可以使用 CTRL-Q
來代替 i_CTRL-Q。<Esc>
或 CTRL-[
結束插入或取代模式,返回到普通模式。完成縮寫。注意:如果您的 <Esc>
鍵很難按到,請嘗試使用 CTRL-[
代替。i_META i_ALT ALT (META) 如果該組合鍵沒有被映射,則可能像 <Esc>
一樣。例如,如果 <A-x>
沒有插入模式映射,則 <A-x>
的行為就像 <Esc>
x。i_CTRL-C<BS>
或 CTRL-H
刪除游標之前的字元(有關連接行的資訊,請參閱 i_backspacing)。i_<Del> i_DEL <Del>
刪除游標下的字元。如果游標位於行尾,並且 'backspace' 選項包含 "eol"(預設值),則刪除 <EOL>
;下一行附加到目前行之後。i_CTRL-W<Tab>
或 CTRL-I
插入一個製表符。如果開啟 'expandtab' 選項,則插入等效數量的空格(使用 CTRL-V
<Tab>
避免展開;如果 CTRL-V
被映射,則使用 CTRL-Q
<Tab>
i_CTRL-Q)。另請參閱 'smarttab' 選項和 ins-expandtab。i_CTRL-J i_<NL> <NL>
或 CTRL-J
開始新的一行。i_CTRL-M i_<CR> <CR>
或 CTRL-M
開始新的一行。i_CTRL-K{char1}
[char2] 輸入二合字母(請參閱 digraphs)。當 {char1}
是特殊鍵時,該鍵的程式碼以 <> 形式插入。例如,字串 "<S-Space>" 可以透過輸入 <C-K>
<S-Space>
(兩個鍵)來輸入。兩個字元都不會被視為映射。{register}
i_CTRL-RCTRL-R
和第二個字元之間,將顯示 '"',表示您需要輸入暫存器的名稱。文字的插入方式就像您輸入的一樣,但不使用映射和縮寫。如果您設定了 'textwidth'、'formatoptions' 或 'autoindent' 等選項,則會影響將要插入的內容。這與 "p" 命令和使用滑鼠貼上的情況不同。特殊暫存器:'"' 未命名的暫存器,包含上次刪除或複製的文字 '%' 目前檔案名稱 '#' 備用檔案名稱 "*" 剪貼簿內容(X11:主要選取)'+' 剪貼簿內容 '/' 上次搜尋模式 ':' 上次命令列 '.' 上次插入的文字 i_CTRL-R_-CTRL-R
="\<Up>" 使用 CTRL-R
CTRL-R
以文字方式插入文字。當結果為 List 時,這些項目會用作行。它們也可以包含換行符號。當結果為浮點數時,它會自動轉換為字串。當調用 append() 或 setline() 時,還原序列將被中斷。有關暫存器的資訊,請參閱 registers。CTRL-R
{register}
i_CTRL-R_CTRL-RCTRL-R
類似,但文字以文字方式插入,而不是像輸入的一樣。當暫存器包含 <BS>
等字元時,此行為會有差異。例如,暫存器 a 包含 "ab^Hc"CTRL-R a results in "ac". CTRL-R CTRL-R a results in "ab^Hc".
CTRL-R
CTRL-O
,請參閱下文。'.' 暫存器(上次插入的文字)仍然像輸入一樣插入。執行此命令後,'.' 暫存器包含來自暫存器的文字,就像它是透過輸入插入的一樣。CTRL-O
{register}
i_CTRL-R_CTRL-OP
一樣。'.' 暫存器(上次插入的文字)仍然像輸入一樣插入。執行此命令後,'.' 暫存器包含輸入的命令,而不是文字。也就是說,文字 "^R^O",而不是來自暫存器的文字。在 取代模式 中不取代字元!CTRL-P
{register}
i_CTRL-R_CTRL-PCTRL-V
之後輸入的字元不會被視為映射。對於特殊鍵,CTRL 修飾符可以包含在按鍵中,以產生控制字元。如果該鍵沒有控制字元,則插入其 按鍵標記法。注意:當 CTRL-V
被映射(例如,用於貼上文字)時,您通常可以使用 CTRL-Q
來代替 i_CTRL-Q。CTRL-V
相同,但不要嘗試將 CTRL 修飾符包含在按鍵中。CTRL-E
和 CTRL-Y
,不會使用 'textwidth',以便能夠從長行複製字元。CTRL-_
將游標移動到輸入文字的末尾。CTRL-^
切換使用輸入語言字元。當定義了語言 :lmap 映射時CTRL-W
和 CTRL-U
會在起始位置停止<EOL>
。<C-V>
032。您可以省略開頭的零,在這種情況下,數字後輸入的字元必須是非數字。其他模式也是如此:一旦您輸入對該模式無效的字元,就會使用它之前的值,並以正常方式處理「無效」字元。<NL>
,在內部用於表示 <Nul>
字元。當將緩衝區寫入檔案時,<NL>
字元會被轉換為 <Nul>
。 <NL>
字元會寫在每一行的末尾。因此,如果您想在檔案中插入 <NL>
字元,您必須換行。另請參閱 'fileformat'。CTRL-X
後,每個 CTRL-E
(CTRL-Y
) 都會將視窗向上(向下)捲動一行,除非這會導致游標從檔案中的目前位置移動。一旦按下另一個按鍵,就會退出 CTRL-X
模式,並將該按鍵視為在插入模式中解釋。CTRL-O
。<Up>
游標向上移動一行<Down>
游標向下移動一行 i_<Down><Up>
游標向上移動一行,插入起始欄位 i_CTRL-G_<Up>CTRL-K
游標向上移動一行,插入起始欄位 i_CTRL-G_CTRL-K<Down>
游標向下移動一行,插入起始欄位 i_CTRL-G_<Down> CTRL-G j 游標向下移動一行,插入起始欄位 i_CTRL-G_j CTRL-G CTRL-J
游標向下移動一行,插入起始欄位 i_CTRL-G_CTRL-J <Left>
游標向左移動一個字元 i_<Left><Right>
游標向右移動一個字元 i_<Right><S-Left>
游標向後移動一個單字(如 "b" 命令) i_<S-Left><C-Left>
游標向後移動一個單字(如 "b" 命令) i_<C-Left><S-Right>
游標向前移動一個單字(如 "w" 命令) i_<S-Right> <C-Right>
游標向前移動一個單字(如 "w" 命令) i_<C-Right> <Home>
游標移動到該行的第一個字元 i_<Home><End>
游標移動到該行的最後一個字元之後 i_<End><C-Home>
游標移動到檔案中的第一個字元 i_<C-Home><C-End>
游標移動到檔案中的最後一個字元之後 i_<C-End><LeftMouse>
游標移動到滑鼠點擊的位置 i_<LeftMouse><S-Up>
將視窗向上移動一頁 i_<S-Up><PageUp>
將視窗向上移動一頁 i_<PageUp><S-Down>
將視窗向下移動一頁 i_<S-Down><PageDown>
將視窗向下移動一頁 i_<PageDown><ScrollWheelDown>
將視窗向下移動三行 i_<ScrollWheelDown> <S-ScrollWheelDown>
將視窗向下移動一頁 i_<S-ScrollWheelDown><ScrollWheelUp>
將視窗向上移動三行 i_<ScrollWheelUp><S-ScrollWheelUp>
將視窗向上移動一頁 i_<S-ScrollWheelUp><ScrollWheelLeft>
將視窗向左移動六欄 i_<ScrollWheelLeft> <S-ScrollWheelLeft>
將視窗向左移動一頁 i_<S-ScrollWheelLeft><ScrollWheelRight>
將視窗向右移動六欄 i_<ScrollWheelRight> <S-ScrollWheelRight>
將視窗向右移動一頁 i_<S-ScrollWheelRight>CTRL-\
CTRL-O
類似於 CTRL-O
,但不移動游標 i_CTRL-\_CTRL-OCTRL-O
命令有時會有副作用:如果游標超出該行的末尾,它將會被放置在該行的最後一個字元上。在對應中,最好使用 <Esc>
(先在文字中放置一個 "x",然後 <Esc>
將永遠把游標放在上面)。或者使用 CTRL-\
CTRL-O
,但請注意游標可能超出該行的末尾。請注意,CTRL-\
CTRL-O
後面的命令仍然可以移動游標,它不會恢復到其原始位置。CTRL-O
命令會將您帶到普通模式。如果您然後使用命令再次進入插入模式,它通常不會巢狀。因此,當輸入 "a<C-O>a" 然後 <Esc>
將您帶回普通模式時,您不需要鍵入兩次 <Esc>
。例外情況是當不鍵入命令時,例如,當執行對應或來源腳本時。這使得簡短切換到插入模式的對應能夠正常工作。CTRL-O
之後重複命令的效果太複雜了。CTRL-G
u 的範例:inoremap <C-H> <C-G>u<C-H>這會重新定義退格鍵以開始一個新的復原序列。現在您可以使用
CTRL-O
u 來復原退格鍵的效果,而不會改變您之前輸入的內容。另一個範例:inoremap <CR> <C-]><C-G>u<CR>這會在每個換行符號處開始一個新的復原區塊。它也會在此之前展開縮寫。
CTRL-G
U 的範例inoremap <Left> <C-G>U<Left> inoremap <Right> <C-G>U<Right> inoremap <expr> <Home> col('.') == match(getline('.'), '\S') + 1 ? \ repeat('<C-G>U<Left>', col('.') - 1) : \ (col('.') < match(getline('.'), '\S') ? \ repeat('<C-G>U<Right>', match(getline('.'), '\S') + 0) : \ repeat('<C-G>U<Left>', col('.') - 1 - match(getline('.'), '\S'))) inoremap <expr> <End> repeat('<C-G>U<Right>', col('$') - col('.')) inoremap ( ()<C-G>U<Left>這使得在插入模式中使用游標鍵成為可能,而不會開始新的復原區塊,因此使用 . (重做) 將會如預期般運作。此外,輸入像這樣的文字(使用上面"("的映射)
CTRL-O
會分割復原:它之前和之後輸入的文字會分別復原。如果您想要避免這種情況(例如,在映射中),您或許可以使用 CTRL-R
= i_CTRL-R。例如,呼叫函數:imap <F2> <C-R>=MyFunc()<CR>當 'whichwrap' 選項設定適當後,在該行第一個/最後一個字元上的
<Left>
和 <Right>
鍵會使游標換行至上一行/下一行。CTRL-G
j 和 CTRL-G
k 命令可用於在欄位前方插入文字。範例int i; int j;將游標定位在第一個 "int" 上,輸入 "istatic
<C-G>
j "。結果是static int i; int j;當在每一行的欄位前方插入相同的文字時,請使用視覺區塊命令 "I" v_b_I。
<Tab>
,請先輸入 CTRL-V
(當 CTRL-V
被映射時,請使用 CTRL-Q
i_CTRL-Q)。預設情況下,'expandtab' 選項是關閉的。請注意,在取代模式下,單個字元會被多個空格取代。這樣做的結果是該行中的字元數會增加。退格鍵會一次刪除一個空格。只有在您退格刪除的空格 (最後一個) 時,才會放回原始字元。<Tab>
會在行的開頭插入 'shiftwidth' 個位置,並在其他位置插入 'tabstop' 個位置。這表示通常會插入空格而不是 <Tab>
字元。當 'smarttab' 關閉時,<Tab>
總是插入 'tabstop' 個位置,而 'shiftwidth' 僅用於 ">>" 等。<Tab>
會插入 'softtabstop' 個位置,而用於刪除空白的 <BS>
會刪除 'softtabstop' 個位置。這感覺像是將 'tabstop' 設定為 'softtabstop',但真正的 <Tab>
字元仍然佔用 'tabstop' 個位置,因此您的檔案在其他應用程式使用時仍然看起來正確。<BS>
將嘗試刪除盡可能多的空白,以移動到上一個 'softtabstop' 位置,除非先前插入的字元是空格,否則它只會刪除游標之前的字元。否則,您無法始終刪除游標之前的單個字元。您必須先刪除 'softtabstop' 個字元,然後輸入額外的空格才能到達您想要的位置。<NL>
,則會插入換行符號,且不會刪除任何字元。<Tab>
字元。如果您在其位置輸入正常的列印字元,則字元數仍然相同,但欄數會變小。<BS>
、CTRL-W
或 CTRL-U
),會發生的情況是您會刪除變更。被取代的字元會還原。如果您已輸入超過現有文字,則您新增的字元會被刪除。這實際上是一個字元接字元的復原。<Tab>
會將一個字元取代為多個空格。這樣做的結果是該行中的字元數會增加。退格鍵會一次刪除一個空格。只有在您退格刪除的空格 (最後一個) 時,才會放回原始字元。<Tab>
,它可能會取代數個正常字元,而如果您在 <Tab>
的頂端輸入字母,則可能根本不會取代任何內容,因為 <Tab>
仍會與之前的位置對齊。<NL>
仍然不會導致檔案中較後面的字元看起來移動。目前行的其餘部分將被 <NL>
取代(也就是說,它們被刪除),並且取代會繼續在下一行上進行。除非您超出檔案結尾,否則不會插入新行。CTRL-T
和 CTRL-D
時,會看到有趣的效果。游標之前的字元會像往常一樣橫向移動,但該行中較後面的字元仍然保持靜止。CTRL-T
會將部分舊行隱藏在移動的字元下方,但 CTRL-D
會再次顯示它們。<BS>
等會還原被取代的字元。這仍然與 'smartindent'、CTRL-T
和 CTRL-D、'expandtab'、'smarttab'、'softtabstop' 等結合使用。<Tab>
分隔的欄位非常有用,以便在保持所有欄位對齊的情況下輸入新資料。CTRL-N
和 CTRL-P
之外,所有這些都在 CTRL-X
模式下完成。這是插入和取代模式的子模式。輸入 CTRL-X
並加上其中一個 CTRL-X
命令,即可進入 CTRL-X
模式。輸入非有效的 CTRL-X
模式命令的按鍵,即可離開 CTRL-X
模式。有效的按鍵是 CTRL-X
命令本身、CTRL-N(下一個)和 CTRL-P
(上一個)。CTRL-Y
來停止補全,並接受目前選取的項目。CTRL-Y
不會被插入。輸入空格、Enter 或其他一些不可列印的字元將會離開補全模式,並插入輸入的字元。CTRL-X
模式下有效的按鍵不會被映射。這使得 :map <C-F> <C-X><C-F>
可以運作。結束 CTRL-X
模式的按鍵(任何非有效的 CTRL-X
模式命令的按鍵)會被映射。此外,使用 'complete' 進行補全時,映射會照常套用。:inoremap <C-]> <C-X><C-]> :inoremap <C-F> <C-X><C-F> :inoremap <C-D> <C-X><C-D> :inoremap <C-L> <C-X><C-L>作為一種特殊情況,輸入
CTRL-R
來執行暫存器插入(請參閱 i_CTRL-R)不會退出 CTRL-X
模式。這主要是為了允許使用 '=' 暫存器來調用一些函數,以確定下一個操作。如果暫存器的內容(或 '=' 暫存器求值的結果)不是有效的 CTRL-X
模式按鍵,那麼 CTRL-X
模式將會退出,如同已輸入這些按鍵一樣。<Tab>
映射為:如果目前行目前只有空白字元,則實際插入 <Tab>
;或者開始/繼續 CTRL-N
補全操作function! CleverTab() if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$' return "\<Tab>" else return "\<C-N>" endif endfunction inoremap <Tab> <C-R>=CleverTab()<CR>補全整行 compl-whole-line
CTRL-L
向後搜尋以與游標前目前行開頭字元相同的字元開頭的行。會忽略縮排。匹配的行會插入到游標之前。'complete' 選項用於決定要搜尋哪些緩衝區以尋找匹配項。會使用已載入和未載入的緩衝區。CTRL-L
或 CTRL-P
向後搜尋下一個匹配行。此行會取代先前的匹配行。CTRL-N
向前搜尋下一個匹配行。此行會取代先前的匹配行。CTRL-X
CTRL-L
在展開一行之後,您可以透過再次輸入 CTRL-X
CTRL-L
來取得它旁邊的行,除非使用了雙 CTRL-X
。僅適用於已載入的緩衝區。CTRL-P
向後搜尋以游標前的關鍵字開頭的單字。找到的關鍵字會插入到游標之前。CTRL-N
向前搜尋下一個匹配的關鍵字。此關鍵字會取代先前的匹配關鍵字。CTRL-P
向後搜尋下一個匹配的關鍵字。此關鍵字會取代先前的匹配關鍵字。CTRL-X
CTRL-N
或 CTRL-X
CTRL-P
除非使用了雙 CTRL-X
,否則進一步使用 CTRL-X
CTRL-N
或 CTRL-X
CTRL-P
將會在其他內容中複製先前展開後面的單字。CTRL-N
和 CTRL-P
都會插入不同的匹配項(除非只有一個匹配的關鍵字)。CTRL-X
CTRL-P
或 CTRL-X
CTRL-N
來取得其他內容中展開後面的單字。這些序列會搜尋剛展開的文字,並透過取得額外的單字來進一步展開。如果您需要重複一系列複雜的單字,這會很有用。儘管 CTRL-P
和 CTRL-N
只會尋找至少兩個字元的字串,但 CTRL-X
CTRL-P
和 CTRL-X CTRL-N
可用於展開僅一個字元的單字。例如,若要取得:México,您可以輸入:M^N^P^X^P^X^P CTRL-N 會啟動展開,然後 CTRL-P
會取回單個字元 "M",接下來的兩個 CTRL-X
CTRL-P
會取得單字 "é" 和 ";xico"。CTRL-X
CTRL-P
或 CTRL-X
CTRL-N
將會搜尋以這個單字開頭的那些行。CTRL-K
在 'dictionary' 選項給定的檔案中,搜尋以游標前的關鍵字開頭的單字。這類似於 CTRL-N
,但只會搜尋字典檔案,而不會搜尋目前檔案。找到的關鍵字會插入到游標之前。這可能會相當慢,因為會在首次使用匹配項之前找到所有匹配項。預設情況下,'dictionary' 選項為空。如需在哪裡找到單字列表的建議,請參閱 'dictionary' 選項。'ignorecase'、'smartcase' 和 'infercase' 會套用。CTRL-K
或 CTRL-N
向前搜尋下一個匹配的關鍵字。此關鍵字會取代先前的匹配關鍵字。CTRL-P
向後搜尋下一個匹配的關鍵字。此關鍵字會取代先前的匹配關鍵字。CTRL-T
的運作方式與 CTRL-X
CTRL-K
相同,但採用特殊方式。它會使用 'thesaurus' 選項,而不是 'dictionary'。如果在同義詞庫檔案中找到匹配項,則同一行中的所有剩餘單字都會包含為匹配項,即使它們沒有完成該單字。因此,可以完全取代一個單字。CTRL-T
或 CTRL-N
向前搜尋下一個匹配的關鍵字。此關鍵字會取代先前的匹配關鍵字。CTRL-P
向後搜尋下一個匹配的關鍵字。此關鍵字會取代先前的匹配關鍵字。angry furious mad enraged將游標放在字母 "ang" 之後,並輸入
CTRL-X
CTRL-T
,會完成單字 "angry";後續按下會將單字變更為 "furious"、"mad" 等。func Thesaur(findstart, base) if a:findstart return searchpos('\<', 'bnW', line('.'))[1] - 1 endif let res = [] let h = '' for l in systemlist('aiksaurus ' .. shellescape(a:base)) if l[:3] == '=== ' let h = '(' .. substitute(l[4:], ' =*$', ')', '') elseif l ==# 'Alphabetically similar known words are: ' let h = "\U0001f52e" elseif l[0] =~ '\a' || (h ==# "\U0001f52e" && l[0] ==# "\t") call extend(res, map(split(substitute(l, '^\t', '', ''), ', '), {_, val -> {'word': val, 'menu': h}})) endif endfor return res endfunc if exists('+thesaurusfunc') set thesaurusfunc=Thesaur endif補全目前和包含檔案中的關鍵字 compl-keyword
CTRL-N
向前搜尋下一個符合的關鍵字。此關鍵字會取代前一個符合的關鍵字。注意:CTRL-I
與 <Tab>
相同,通常會在成功補全後輸入,因此 CTRL-I
不用於搜尋下一個符合項。CTRL-P
向後搜尋前一個符合的關鍵字。此關鍵字會取代前一個符合的關鍵字。CTRL-X
CTRL-I
除非使用雙 CTRL-X
,否則進一步使用 CTRL-X
CTRL-I
將複製先前展開後在其他上下文中的單字。CTRL-]
搜尋第一個與游標前字元開頭相同的標籤。找到的標籤會插入到游標前。字母字元和 iskeyword 中的字元用於決定哪些字元包含在標籤名稱中(與關鍵字相同)。另請參閱 CTRL-]。「showfulltag」選項可用於加入標籤定義周圍的上下文。CTRL-]
或 CTRL-N
向前搜尋下一個符合的標籤。此標籤會取代前一個符合的標籤。CTRL-P
向後搜尋前一個符合的標籤。此標籤會取代前一個符合的標籤。CTRL-F
搜尋第一個與游標前字元開頭相同的檔案名稱。找到的檔案名稱會插入到游標前。字母字元和 isfname 中的字元用於決定哪些字元包含在檔案名稱中。注意:這裡尚未使用「path」選項。 CTRL-F
或 CTRL-N
向前搜尋下一個符合的檔案名稱。此檔案名稱會取代前一個符合的檔案名稱。CTRL-P
向後搜尋前一個符合的檔案名稱。此檔案名稱會取代前一個符合的檔案名稱。CTRL-D
在目前和包含的檔案中搜尋第一個與游標前字元開頭相同的定義(或巨集)名稱。找到的定義名稱會插入到游標前。CTRL-D
或 CTRL-N
向前搜尋下一個符合的巨集名稱。此巨集名稱會取代前一個符合的巨集名稱。CTRL-P
向後搜尋前一個符合的巨集名稱。此巨集名稱會取代前一個符合的巨集名稱。CTRL-X
CTRL-D
除非使用雙 CTRL-X
,否則進一步使用 CTRL-X
CTRL-D
將複製先前展開後在其他上下文中的單字。CTRL-V
猜測游標前項目的類型,並找到第一個符合項。注意:當 CTRL-V
被對應時,您通常可以使用 CTRL-Q
而不是 i_CTRL-Q。CTRL-V
或 CTRL-N
向前搜尋下一個符合項。此符合項會取代前一個符合項。CTRL-P
向後搜尋前一個符合項。此符合項會取代前一個符合項。CTRL-X
CTRL-V
進一步使用 CTRL-X
CTRL-V
將執行與 CTRL-V
相同的操作。這允許將按鍵對應以執行 Vim 命令補全,例如:imap <Tab> <C-X><C-V>使用者定義的補全 compl-function
CTRL-P
使用前一個符合項。此符合項會取代前一個符合項。CTRL-P
使用前一個符合項。此符合項會取代前一個符合項。CTRL-S
會在許多 Unix 終端機中暫停顯示。請改用 's'。輸入 CTRL-Q 以恢復顯示。CTRL-S
或 CTRL-X s 找到游標前的單字,並找到它的第一個拼字建議。CTRL-S
或 CTRL-N
使用下一個建議。這會取代前一個建議。請注意,您不能在此處使用 's'。CTRL-P
使用前一個建議。這會取代前一個建議。CTRL-N
向前搜尋下一個匹配的關鍵字。此關鍵字會取代先前的匹配關鍵字。CTRL-P
向後搜尋下一個匹配的關鍵字。此關鍵字會取代先前的匹配關鍵字。CTRL-X
CTRL-N
或 CTRL-X
CTRL-P
除非使用了雙 CTRL-X
,否則進一步使用 CTRL-X
CTRL-N
或 CTRL-X
CTRL-P
將會在其他內容中複製先前展開後面的單字。local triggers = {"."}
vim.api.nvim_create_autocmd("InsertCharPre", {
buffer = vim.api.nvim_get_current_buf(),
callback = function()
if vim.fn.pumvisible() == 1 or vim.fn.state("m") == "m" then
return
end
local char = vim.v.char
if vim.list_contains(triggers, char) then
local key = vim.keycode("<C-x><C-n>")
vim.api.nvim_feedkeys(key, "m", false)
end
end
})
let matches = ... list of words ... return {'words': matches, 'refresh': 'always'}
fun! CompleteMonths(findstart, base) if a:findstart " locate the start of the word let line = getline('.') let start = col('.') - 1 while start > 0 && line[start - 1] =~ '\a' let start -= 1 endwhile return start else " find months matching with "a:base" let res = [] for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") if m =~ '^' .. a:base call add(res, m) endif endfor return res endif endfun set completefunc=CompleteMonths
fun! CompleteMonths(findstart, base) if a:findstart " locate the start of the word let line = getline('.') let start = col('.') - 1 while start > 0 && line[start - 1] =~ '\a' let start -= 1 endwhile return start else " find months matching with "a:base" for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") if m =~ '^' .. a:base call complete_add(m) endif sleep 300m " simulate searching for next match if complete_check() break endif endfor return [] endif endfun set completefunc=CompleteMonths
CTRL-N
或 CTRL-P
之後。2. 已使用游標鍵選擇另一個符合項。此時尚未插入該符合項,僅在快顯選單中反白顯示該項目。3. 僅插入了部分符合項,並且輸入了字元或使用了退格鍵。然後會根據游標前面的內容調整符合項清單。CTRL-N
或 CTRL-P
,則會進入第一種狀態。這不會變更符合項清單。CTRL-P
的對應。:imap <F7> <C-N><C-P>
<BS>
和 CTRL-H
刪除一個字元,尋找游標之前單字的符合項。這會縮減符合項清單,通常只剩下一個項目,並切換到第二種狀態。任何非特殊字元:停止完成,而不變更符合項並插入輸入的字元。<BS>
和 CTRL-H
刪除一個字元,尋找游標之前較短單字的符合項。這可能會找到更多符合項。CTRL-L 從目前的符合項新增一個字元,可能會減少符合項的數量。任何可列印的非空白字元:新增此字元並減少符合項的數量。<PageUp>
選取多個項目之前的符合項,但不插入。<PageDown>
選取多個項目之後的符合項,但不插入。<Up>
選取上一個符合項,如同使用 CTRL-P
一樣,但不插入。<Down>
選取下一個符合項,如同使用 CTRL-N
一樣,但不插入。<Space>
或 <Tab>
停止完成,而不變更符合項並插入輸入的字元。<Enter>
按鍵的行為取決於您所處的狀態:第一種狀態:使用文字原樣並插入換行符號。第二種狀態:插入目前選取的符合項。第三種狀態:使用文字原樣並插入換行符號。<Enter>
按鍵會插入該符合項。如果您輸入了其他內容,則 <Enter>
會插入換行符號。:inoremap <Down> <C-R>=pumvisible() ? "\<lt>C-N>" : "\<lt>Down>"<CR>您可以在對應中使用
<expr>
,以便在輸入字元且滿足某些條件時使用快顯選單。例如,用於輸入點inoremap <expr> . MayComplete() func MayComplete() if (can complete) return ".\<C-X>\<C-O>" endif return '.' endfunc請參閱 :map-<expr> 以取得更多資訊。
{filetype}
的檔案應該是 'runtimepath' 中的 autoload/{filetype}complete.vim。因此,對於 "java",它是 autoload/javacomplete.vim。% ctags -R -f ~/.config/nvim/systags /usr/include /usr/local/include在您的 vimrc 檔案中,將此標籤檔案新增至 'tags' 選項
set tags+=~/.config/nvim/systags當在沒有任何 "." 或 "->" 的名稱之後使用
CTRL-X
CTRL-O
時,會直接從標籤檔案完成。這適用於任何識別碼,也適用於函數名稱。如果您想要完成標籤檔案中沒有出現的本機變數名稱,請改用 CTRL-P
。CTRL-X
CTRL-O
時,Vim 會嘗試識別變數的類型,並判斷它具有哪些成員。這表示只會列出對該變數有效的成員。CTRL-X
CTRL-O
會為複合類型新增 "." 或 "->"。CTRL-O
提供 (X)HTML 檔案各種元素的完成。它旨在支援撰寫 XHTML 1.0 Strict 檔案,但也適用於其他 HTML 版本。功能<style>
標籤和包含的 CSS 檔案取得的 "class" 和 "id" 屬性的值CTRL-X
CTRL-O
會關閉最後開啟的標籤<script>
標籤內以及事件屬性的值中(包括掃描外部檔案)。IE FF W3C Omni completion ~ +/- +/- + + ~ + + - + ~ + - - - ~ - + - - ~
/* @var $myVar myClass */ $myVar->
CTRL-X
CTRL-O
提供的補全會根據上下文而有所不同let g:rubycomplete_buffer_loading = 1<- 在上面的上下文 1 中,Vim 可以解析整個緩衝區,以將類別列表添加到補全結果中。此功能預設為關閉,要啟用它,請加入
let g:rubycomplete_classes_in_global = 1
let g:rubycomplete_rails = 1
setlocal omnifunc=syntaxcomplete#Complete您可以透過將以下內容放入您的 init.vim(在任何 ":filetype" 命令之後)來自動執行此操作
if has("autocmd") && exists("+omnifunc") autocmd Filetype * \ if &omnifunc == "" | \ setlocal omnifunc=syntaxcomplete#Complete | \ endif endif只有在特定外掛程式尚未存在於該檔案類型時,上述操作才會將補全設定為此腳本。
syntax list您首先會注意到有許多不同的語法群組。PHP 語言可以包含來自不同語言的元素,例如 HTML、JavaScript 和更多。語法外掛程式只會包含以檔案類型 "php" 開頭的語法群組,在本例中。例如,這些語法群組預設包含在 PHP 中:phpEnvVar、phpIntVar、phpFunctions。
htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects要在編輯 PHP 檔案時擷取任何 JavaScript 和 HTML 關鍵字語法群組,您可以使用 3 個不同的正規表示式,每個語言一個。或者,您可以直接將包含群組限制為特定值,而無需使用正規表示式字串
let g:omni_syntax_group_include_php = 'php\w\+,javaScript\w\+,html\w\+' let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
let g:omni_syntax_group_include_{filetype} = 'regex,comma,separated'PHP 語言具有大量它知道如何語法高亮顯示的項目。這些項目將在 omni 補全列表中可用。
let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant' let g:omni_syntax_group_exclude_php = 'php\w*Constant'透過逗號分隔,在此列表中新增任意數量的語法群組。此變數的基本形式為
let g:omni_syntax_group_exclude_{filetype} = 'regex,comma,separated'您可以根據需要建立任意數量的這些變數,只變更變數名稱結尾的檔案類型。
let g:omni_syntax_use_iskeyword = 0對於外掛程式開發人員,此外掛程式公開了一個公共函式 OmniSyntaxList。此函式可用於請求語法項目列表。在編輯 SQL 檔案 (:e syntax.sql) 時,您可以使用 ":syntax list" 命令來查看各種群組和語法項目。例如
syntax list產生類似於此的資料
echo OmniSyntaxList( [] )要僅擷取 sqlOperator 語法群組的語法項目
echo OmniSyntaxList( ['sqlOperator'] )要擷取 sqlOperator 和 sqlType 群組的所有語法項目
echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )也可以使用正規表示式
echo OmniSyntaxList( ['sql\w\+'] )在外掛程式內,您通常會將輸出指派給 List
let myKeywords = [] let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
CTRL-X
CTRL-O
會關閉最後開啟的標籤let g:xmldata_crippled = { \ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"], \ 'vimxmlroot': ['tag1'], \ 'tag1': \ [ ['childoftag1a', 'childoftag1b'], {'attroftag1a': [], \ 'attroftag1b': ['valueofattr1', 'valueofattr2']}], \ 'childoftag1a': \ [ [], {'attrofchild': ['attrofchild']}], \ 'childoftag1b': \ [ ['childoftag1a'], {'attrofchild': []}], \ "vimxmltaginfo": { \ 'tag1': ['Menu info', 'Long information visible in preview window']}, \ 'vimxmlattrinfo': { \ 'attrofchild': ['Menu info', 'Long information visible in preview window']}}此範例將放置在 "autoload/xml/crippled.vim" 檔案中,並且可以協助編寫此檔案
<tag1 attroftag1b="valueofattr1"> <childoftag1a attrofchild> & < </childoftag1a> <childoftag1b attrofchild="5"> <childoftag1a> > ' " </childoftag1a> </childoftag1b> </tag1>在此範例中,可以看到四個特殊元素
:XMLns xhtml10s :XMLns xsl xsl:XMLent
{name}
:XMLent:XMLent xhtml10s用法
<|將自動完成為適當的 XHTML 標籤,在此情況下
<xsl:|將自動完成為適當的 XSL 標籤。
:echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack")
<Esc>
結束插入模式。有關插入模式中的其他特殊字元,請參閱 mode-ins-repl。[count] 的效果會在結束插入模式後發生。{range}
,則文字會插入在目前行之後。加入 [!] 會在執行此指令時切換 'autoindent'。{range}
,則文字會插入在目前行之前。加入 [!] 會在執行此指令時切換 'autoindent'。:a|one two . :visual會在游標行之後附加以下文字
one two
<Esc>
。可以在自動指令中使用,例如:au BufEnter scratch stopinsert
{cmd}
,並將其標準輸出插入在游標下方或指定的行下方。會使用一個暫存檔案來儲存指令的輸出,然後將其讀取到緩衝區中。'shellredir' 用於儲存指令的輸出,可以設定為是否包含 stderr。{cmd}
的執行方式與 ":!{cmd}" 相同,任何 '!' 都會取代為上一個指令 :!。請參閱 ++opt 以取得 [++opt] 的可能值。{name}
"。:read ++edit filename效果是 'fileformat'、'fileencoding'、'bomb' 等選項會設定為 "filename" 偵測到的內容。請注意,仍會保留單一空行,您可能需要將其刪除。
<EOL>
樣式<CR>
<NL>
或 <NL>
DOS 格式 "unix" <NL>
Unix 格式 "mac" <CR>
Mac 格式<EOL>
的類型 (請參閱 檔案格式)。然而,'fileformat' 選項不會被更改,偵測到的格式僅在讀取檔案時使用。 'fileencodings' 也會發生類似情況。:r !uuencode binfile binfile此命令會讀取 "binfile",將其進行 uuencode 編碼,然後讀取到目前的緩衝區中。當您編輯電子郵件並想要包含二進位檔案時,這會很有用。
{RO}
檔案為寫入保護 [fifo/socket] 使用串流 [fifo] 使用 fifo 串流 [socket] 使用 socket 串流 [CR missing] 使用 "dos" 'fileformat' 讀取,並且發現沒有前導 CR 的 NL。[NL found] 使用 "mac" 'fileformat' 讀取,並且發現 NL (可能是 "unix" 格式) [long lines split] 至少有一行被分割成兩行 [NOT converted] 想要從 'fileencoding' 轉換到 'encoding',但無法轉換 [converted] 已完成從 'fileencoding' 轉換到 'encoding' [READ ERRORS] 並非所有檔案內容都能讀取