雜項

Nvim 的 :help 頁面, 原始碼 使用 tree-sitter-vimdoc 解析器 產生


雜項指令

1. 雜項指令 various-cmds

CTRL-L
CTRL-L 清除並重繪畫面。重繪可能會在稍後發生,在處理輸入預讀後。另請參閱 nvim__redraw()CTRL-L-default
預設情況下,也會清除搜尋高亮 :nohlsearch 並更新差異 :diffupdatedefault-mappings
:mod :mode :mod[e] 清除並重繪畫面。另請參閱 nvim__redraw()
:redr :redraw :redr[aw][!] 立即重繪待處理的畫面更新,如果包含 "!" 則重繪整個畫面。若要清除畫面,請使用 :modeCTRL-L。它可以用於在腳本或函數中重繪畫面(如果設定了 'lazyredraw',也可以用於映射)。另請參閱 nvim__redraw()
:redraws :redrawstatus :redraws[tatus][!] 重繪當前視窗的狀態列和視窗欄,如果包含 "!" 則重繪所有狀態列和視窗欄。如果命令列包含 'ruler',則改為重繪命令列。如果 'statusline''winbar' 包含不會導致自動更新的項目時,這很有用。另請參閱 nvim__redraw()
:redrawt :redrawtabline :redrawt[abline] 重繪標籤列。當 'tabline' 包含不會觸發自動更新的項目時,更新標籤列很有用。另請參閱 nvim__redraw()
N<Del>
<Del> 輸入數字時:移除最後一位數字。注意:如果您想使用 <BS> 來執行此操作,請將此映射新增至您的 vimrc
:map CTRL-V <BS>   CTRL-V <Del>
:as[cii] 或 ga :as :ascii ga 列印游標下字元的 ASCII 值,以十進位、十六進位和八進位表示。助記符號:Get Ascii 值。
例如,當游標位於 'R' 上時
<R> 82,十六進位 52,八進位 122
當字元為非標準 ASCII 字元,但根據 'isprint' 選項可列印時,也會提供不可列印版本。
當字元大於 127 時,也會列印 <M-x> 形式。例如
<~A> <M-^A> 129,十六進位 81,八進位 201
<p> <|~> <M-~> 254,十六進位 fe,八進位 376
(其中 <p> 是一個特殊字元)
檔案中的 <Nul> 字元在內部儲存為 <NL>,但它會顯示為
<^@> 0,十六進位 00,八進位 000
如果字元具有組合字元,也會顯示這些組合字元。'maxcombine' 的值無關緊要。
如果字元可以作為雙圖插入,也會輸出可用於建立該字元的兩個字元
<ö> 246,十六進位 00f6,八進位 366,雙圖 o :
這表示您可以輸入 CTRL-K o : 來插入 ö。
g8
g8 列印游標下字元中使用的位元組的十六進位值,假設它使用 UTF-8 編碼。這也會顯示組合字元。'maxcombine' 的值無關緊要。一個具有兩個組合字元的字元範例
e0 b8 81 + e0 b8 b9 + e0 b9 89
8g8
8g8 在游標處或之後尋找非法 UTF-8 位元組序列。當編輯應該是 UTF-8 但由於包含非法位元組而被讀取為 8 位元編碼的檔案時,可以使用它。不會繞到檔案結尾。請注意,當游標位於非法位元組上或游標位於多位元組字元的中途時,該指令不會移動游標。
gx
gx 使用系統預設處理程式,透過呼叫 vim.ui.open() 開啟游標處的目前檔案路徑或 URL(由 <cfile>'isfname' 決定)。
v_gx
{Visual}gx 使用系統預設處理程式,透過呼叫 vim.ui.open() 開啟選取的文字。
:p :pr :print E749 :[range]p[rint] [flags] 列印 [range] 行(預設為目前行)。在 GUI 中,您可以使用「檔案.列印」選單項目。有關 [flags],請參閱 ex-flags:filter 指令可用於僅顯示與模式匹配的行。
:[range]p[rint] {count} [flags] 列印 {count} 行,從 [range] 開始(預設為目前行 cmdline-ranges)。有關 [flags],請參閱 ex-flags
:l :list :[range]l[ist] [count] [flags] 與 :print 相同,但預設情況下將 Tab 顯示為 ">",尾隨空格顯示為 "-",不間斷空格字元顯示為 "+"。進一步由 'listchars' 選項更改。有關 [flags],請參閱 ex-flags
:nu :number :[range]nu[mber] [count] [flags] 與 :print 相同,但在每行前面加上行號。(另請參閱 hl-LineNr'numberwidth')。有關 [flags],請參閱 ex-flags
:#
:[range]# [count] [flags] :number 的同義詞。
:#! vim-shebang :#!{anything} 忽略,因此您可以使用以下程式碼開始 Vim 腳本
#!vim -S
let mylogbook='$HOME/logbook.md'
exe $':e {mylogbook}'
$
put ='## ' .. strftime('%d. %b %Y')
norm! o
使該腳本可執行並執行它以建立新的日記項目。
:z E144 :[range]z[+-^.=][count] 顯示以 [range] 指定的行周圍的幾行文字,如果沒有 [range],則顯示目前行周圍的文字。
如果有 [count],則表示您將看到多少行;如果沒有 [count] 且只有一個視窗,則使用 'scroll' 選項值的兩倍,否則使用目前視窗高度減 3。這是在下表中 "scr" 的值。
如果有 [count],則 'window' 選項會設定為其值。
:z 可以單獨使用,也可以後接幾個標記。這些具有以下效果
標記 第一行 最後一行 新游標行
---- ---------- --------- ------------ + 目前行 1 scr 向前 1 scr 向前
1 scr 向後 目前行 目前行 ^ 2 scr 向後 1 scr 向後 1 scr 向後 . 1/2 scr 向後 1/2 scr 向前 1/2 scr 向前 = 1/2 scr 向後 1/2 scr 向前 目前行
完全不指定標記與 "+" 相同。如果標記為 "=",則會在目前行周圍列印一行虛線。
:z!
:[range]z![+-^.=][count] 與 ":z" 類似,但如果未指定 [count],則預設為 Vim 視窗高度減 1。
:[range]z[!]#[+-^.=][count] :z#
與 ":z" 或 ":z!" 類似,但會為行編號。
:=
:= [args] 沒有 [args]:列印最後一行號。有 [args]:等同於 :lua ={expr}。請參閱 :lua
:{range}= 列印 {range} 中的最後一行號。例如,這會列印目前行號
:.=
:norm[al][!] {commands} :norm :normal 執行一般模式指令 {commands}。這使得可以執行在命令列上輸入的一般模式指令。{commands} 的執行方式就像是它們被輸入一樣。對於復原,所有指令都會一起復原。當遇到錯誤時,執行會停止。
如果給定 [!],則不會使用映射。如果沒有給定,當從不可重新映射的映射 (:noremap) 呼叫此指令時,仍然可以映射引數。
{commands} 應該是完整的指令。如果 {commands} 未完成指令,則最後一個指令將被中止,就像輸入了 <Esc><C-C> 一樣。這表示必須完成插入指令(若要啟動插入模式,請參閱 :startinsert)。也必須完成 ":" 指令。您不能使用 "gQ" 來啟動 Ex 模式。
當 ":normal" 忙碌時,不會更新顯示。
{commands} 不能以空格開頭。在其前面放一個計數 1 (一),"1 " 是一個空格。
此指令後面不能接其他指令,因為任何 '|' 都被視為指令的一部分。
此指令可以遞迴使用,但深度受到 'maxmapdepth' 限制。
另一種方法是使用 :execute,它使用表示式作為引數。這允許使用可列印字元來表示特殊字元。
範例
:exe "normal \<c-w>\<c-w>"
:{range}norm[al][!] {commands} :normal-range
針對 {range} 中的每一行執行一般模式指令 {commands}。在執行 {commands} 之前,游標會定位在範圍的第一欄中,針對每一行。否則,它與沒有範圍的 ":normal" 指令相同。
:sh :shell E371 E360 :sh[ell] 已移除。vim-differences
:terminal :te :te[rminal][!] [{cmd}] 在新的終端模擬器緩衝區中,以非互動式的'shell'執行 {cmd}。若沒有 {cmd},則啟動互動式的'shell'
輸入 i 以進入終端模式,接著按鍵會被傳送到終端機中執行的工作。輸入 <C-\><C-N> 以離開終端模式。 CTRL-\_CTRL-N。輸入 <C-\><C-O> 以執行單個普通模式指令 t_CTRL-\_CTRL-O
除非設定了 'hidden',否則當目前緩衝區被修改後會失敗。
若省略 {cmd},且 'shell' 工作沒有錯誤地結束,緩衝區會自動關閉 default-autocmds
要自動進入終端模式
autocmd TermOpen * startinsert
:!cmd :! :!{cmd} 使用 'shell' 執行 {cmd}。另請參閱 :terminal
該指令會在連接到管道(而非終端機)的非互動式 shell 中執行。使用 :terminal 來執行連接到終端機的互動式 shell。
背景化("&")指令不得寫入 stdout 或 stderr,串流會立即關閉。 E5677 請改用 jobstart()
:call jobstart('foo', {'detach':1})
對於 powershell,鏈接字串化的可執行檔路徑需要使用呼叫運算子 (&)。
:!Write-Output "1`n2" | & "C:\Windows\System32\sort.exe" /r
E34
{cmd} 中的任何 "!" 都會被替換為先前的外部指令(另請參閱 'cpoptions'),除非使用反斜線跳脫。範例:":!ls" 接著 ":!echo ! \! \\!" 會執行 "echo ls ! \!"。
{cmd} 中的任何 "|" 都會傳遞給 shell,您無法使用它來附加 Vim 指令。請參閱 :bar
{cmd} 中的任何 "%" 都會展開為目前檔名。 {cmd} 中的任何 "#" 都會展開為替代檔名。特殊字元不會被跳脫,請使用引號或 shellescape()
:!ls "%"
:exe "!ls " .. shellescape(expand("%"))
換行字元會結束 {cmd},除非換行符號前面有反斜線。接下來的內容會被解讀為另一個 : 指令。
指令執行後,會檢查目前檔案的時間戳記和大小 timestamp
如果指令產生過多輸出,可能會跳過某些行,以便指令可以快速執行。不會遺失任何資料,這只會影響顯示。最後幾行始終會顯示(絕不跳過)。
若要避免按下 Enter 的提示,請使用
:silent !{cmd}
:!!
:!! 重複上一個 ":!{cmd}"。
:ve :ver :version :ve[rsion] 列印編輯器的版本和建置資訊。另請參閱 feature-compile
:redi :redir :redi[r][!] > {file} 將訊息重新導向至檔案 {file}。指令的輸出訊息會寫入該檔案,直到重新導向結束。訊息也會同時顯示在螢幕上。當包含 [!] 時,現有檔案會被覆寫。當省略 [!] 時,且 {file} 存在,此指令會失敗。
一次只能有一個 ":redir" 處於作用狀態。呼叫 ":redir" 會在開始重新導向至新的目標之前,關閉任何作用中的重新導向。如需遞迴使用,請查看 execute()
若要停止在螢幕上回顯訊息和指令,請將指令放入函式中,並使用 ":silent call Function()" 呼叫它。其他替代方案是 'verbosefile' 選項或 execute() 函式,這些可以與 ":redir" 組合使用。
:redi[r] >> {file} 將訊息重新導向至檔案 {file}。如果 {file} 已存在,則附加到該檔案。
:redi[r] @{a-zA-Z} :redi[r] @{a-zA-Z}> 將訊息重新導向至暫存器 {a-z}。如果暫存器的名稱以大寫 {A-Z} 給定,則附加到該暫存器的內容。暫存器名稱後的 ">" 是可選的。 :redi[r] @{a-z}>> 將訊息附加到暫存器 {a-z}
:redi[r] @*> :redi[r] @+> 將訊息重新導向至選取或剪貼簿。為了向後相容,暫存器名稱後的 ">" 可以省略。請參閱 quotestarquoteplus。 :redi[r] @*>> :redi[r] @+>> 將訊息附加到選取或剪貼簿。
:redi[r] @"> 將訊息重新導向至未命名的暫存器。為了向後相容,暫存器名稱後的 ">" 可以省略。 :redi[r] @">> 將訊息附加到未命名的暫存器。
:redi[r] => {var} 將訊息重新導向至變數。如果變數不存在,則會建立該變數。如果變數存在,則會將其初始化為空字串。在重新導向結束之前,變數將保持為空。只能使用字串變數。重新導向開始後,如果變數被移除或鎖定或變數類型被更改,則進一步的指令輸出訊息會導致錯誤。當使用區域變數(函式中的 l:var 或腳本中的 s:var)且另一個 :redir 導致目前變數結束時,範圍可能不同,且賦值會失敗。若要取得一個指令的輸出,可以使用 execute() 函式,而不是重新導向。
:redi[r] =>> {var} 將訊息附加到現有變數。只能使用字串變數。
:redi[r] END 結束重新導向訊息。
:filt :filter :filt[er][!] {pattern} {command} :filt[er][!] /{pattern}/ {command}{command} 的輸出限制為與 {pattern} 相符的行。例如,若要僅列出 xml 檔案
:filter /\.xml$/ oldfiles
如果給定 [!],則將 {command} 的輸出限制為與 {pattern} 不相符的行。
{pattern} 是 Vim 搜尋模式。除了用 / 包圍它之外,還可以任何非 ID 字元(請參閱 'isident'),只要它沒有出現在 {pattern} 中即可。如果沒有包圍字元,則模式無法包含 bar 字元。'ignorecase' 不會被使用。
模式會與輸出的相關部分進行比對,不一定是整行。只有某些指令支援篩選,請嘗試一下以檢查它是否有效。一些支援篩選的指令: :# - 篩選整行 :clist - 按檔案名稱或模組名稱篩選 :command - 按指令名稱篩選 :files - 按檔案名稱篩選 :highlight - 按高亮群組篩選 :history - 按歷史指令篩選 :jumps - 按檔案名稱篩選 :let - 按變數名稱篩選 :list - 篩選整行 :llist - 按檔案名稱或模組名稱篩選 :marks - 篩選目前檔案中的文字,或其他檔案的檔案名稱 :oldfiles - 按檔案名稱篩選 :registers - 按暫存器內容篩選(不適用於多行) :set - 按選項名稱篩選
只會篩選一般訊息,不會篩選錯誤訊息。
:sil :silent :silent! :sil[ent][!] {command} 靜默執行 {command}。一般訊息將不會給定或加入訊息歷史記錄。當加入 [!] 時,錯誤訊息也會被略過,並且當偵測到錯誤時,不會中止指令和對應。 v:errmsg 仍會設定。當未使用 [!] 時,錯誤訊息會導致進一步的訊息正常顯示。使用 :redir 開始的重新導向會像往常一樣繼續,儘管可能會有細微的差異。這將允許重新導向指令的輸出,而不會在螢幕上看到它。範例
:redir >/tmp/foobar
:silent g/Aap/p
:redir END
若要靜默執行普通模式指令,請使用 :normal 指令。例如,若要在沒有訊息的情況下搜尋字串
:silent exe "normal /path\<CR>"
":silent!" 用於執行可能失敗但要忽略失敗的指令。範例
:let v:errmsg = ""
:silent! /^begin
:if v:errmsg != ""
: ... pattern was not found
":silent" 也會跳過按下 Enter 的提示。提示使用者輸入的對話方塊(confirm()'swapfile'、…)永遠不會是靜默的。
:uns :unsilent :uns[ilent] {command} 非靜默地執行 {command}。只有當使用 :silent 來執行此指令時,才會有所不同。即使使用 :silent 時,也可以使用此方法來提供訊息。在此範例中,:silent 用於避免關於讀取檔案的訊息,而 :unsilent 用於能夠列出每個檔案的第一行。
:silent argdo unsilent echo expand('%') .. ": " .. getline(1)
:verb :verbose :[count]verb[ose] {command} 使用設定為 [count] 的 'verbose' 執行 {command}。如果省略 [count],則會使用 1。":0verbose" 可用於將 'verbose' 設定為零。額外使用 ":silent" 會產生訊息但不顯示訊息。":silent" 和 ":verbose" 的組合可用於產生訊息並使用 v:statusmsg 及其相關項目檢查訊息。例如
:let v:statusmsg = ""
:silent verbose runtime foobar.vim
:if v:statusmsg != ""
:  " foobar.vim could not be found
:endif
當串連另一個指令時,":verbose" 僅適用於第一個指令
:4verbose set verbose | set verbose
verbose=4
verbose=0
若要在檔案中記錄詳細訊息,請使用 'verbosefile' 選項。
:verbose-cmd
'verbose' 非零時,列出 Vim 選項或按鍵對應或縮寫或使用者定義的函式或指令或高亮群組或自動指令的值時,也會顯示上次定義的位置。如果它們是在 Lua 中定義的,則只有在設定 'verbose' 時才會被找到。因此,請使用 -V1 引數啟動 nvim 以查看它們。如果它是手動定義的,則不會有「上次設定」訊息。當它在執行函式、使用者指令或自動指令時定義時,會回報它定義所在的腳本。
K
[count]K 執行 'keywordprg' 給定的程式,以查詢游標下方或右側的單字(由 'iskeyword' 定義)。預設為 "man"。運作方式如下
:tabnew | terminal {program} {keyword}
特殊情況
如果 'keywordprg' 以 ":" 開頭,則會以 [count] 作為 Vim 指令來叫用它。
如果 'keywordprg' 為空,則會使用 :help
'keywordprg' 等於 "man" 時,"K" 前面的 [count] 會插入到 "man" 指令之後和關鍵字之前。例如,當游標位於 "mkdir" 上時使用 "2K",會導致
!man 2 mkdir
'keywordprg' 等於 "man -s" 時,"K" 前面的 [count] 會插入到 "-s" 之後。如果沒有計數,則會移除 "-s"。 K-lsp-default
Nvim LSP 用戶端會將 K 設定為顯示 LSP「懸停」功能。 lsp-defaults
v_K
{Visual}K 類似於 "K",但會將視覺反白的文字用作關鍵字。僅當反白的文字不超過一行時才有效。
gO
gO 顯示目前緩衝區的檔案類型特定的可瀏覽「大綱」。例如,在說明緩衝區中,這會顯示目錄。
目前在 說明:Man 緩衝區中運作。
[N]gs gs :sl :sleep :[N]sl[eep] [N][m] 什麼都不做 [N] 秒,如果給定了 [m],則什麼都不做 [N] 毫秒。"gs" 始終使用秒。預設為一秒。
:sleep             "sleep for one second
:5sleep             "sleep for five seconds
:sleep 100m     "sleep for 100 milliseconds
10gs             "sleep for ten seconds
可使用 CTRL-C 中斷。「gs」代表「進入睡眠」。在睡眠期間,游標會定位在文字中,若在可見位置。佇列中的訊息會在睡眠期間處理。
:sl! :sleep! :[N]sl[eep]! [N][m] 與上述相同。與 Vim 不同,它不會隱藏游標。vim-differences

2. 像 less 或 more 一樣使用 Vim less

如果您使用 less 或 more 程式來檢視檔案,您不會獲得語法高亮。因此您可能會想改用 Vim。您可以使用 shell 腳本 "$VIMRUNTIME/scripts/less.sh" 來達成此目的。
這個 shell 腳本會使用 Vim 腳本 "$VIMRUNTIME/scripts/less.vim"。它會設定對應來模擬 less 支援的指令。否則,您仍然可以使用 Vim 指令。
這並非完美。例如,當檢視短檔案時,Vim 仍然會佔用整個螢幕。但它對於大多數使用情況都足夠好用,而且您還可以獲得語法高亮。
"h" 鍵會提供可用指令的簡短概觀。
如果您想在使用 less 時設定不同的選項,請在您的 vimrc 中定義 LessInitFunc,例如
func LessInitFunc()
  set nocursorcolumn nocursorline
endfunc

3. 註解 commenting

Nvim 支援根據 'commentstring' 來註解和取消註解行。
對單行操作的行為如下
如果該行符合 'commentstring',則註解標記會被移除 (例如 /*foo*/ 會轉換為 foo)。
否則註解標記會被加入到目前行 (例如 foo 會轉換為 /*foo*/)。空白行會被忽略。
對多行操作的行為如下
如果每個受影響的非空白行都符合 'commentstring',則所有註解標記都會被移除。
否則,所有受影響的行都會被轉換為註解;空白行會被轉換為空的註解 (例如 /**/)。註解標記會對齊到縮排最少的行。
符合 'commentstring' 並不考慮註解標記中的空白。移除註解標記會先嘗試完全符合,如果失敗則會使用修剪掉空白的標記。
如果緩衝區的檔案類型與已安裝 treesitter 解析器的語言相關聯,則會呼叫 vim.filetype.get_option() 來查詢對應游標位置的 'commentstring' 的值。(在 treesitter-language-injections 的情況下,這可能與緩衝區的 'commentstring' 不同。)
gc gc-default gc{motion} 註解或取消註解由 {motion} 涵蓋的行。
gcc gcc-default gcc 註解或取消註解從游標開始的 [count] 行。
v_gc v_gc-default {Visual}gc 註解或取消註解選取的行。
o_gc o_gc-default gc 用於游標周圍最大連續非空白註解區塊的文字物件 (例如,gcgc 取消註解一個註解區塊;dgc 刪除它)。僅在等待操作模式下有效。
主要
指令索引
快速參考