簡介

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


Nvim 參考

介紹 intro

Vim 是一個文字編輯器,它包含了 Unix 程式 "Vi" 的大部分命令以及許多新命令。
本手冊的概述可以在 "help.txt" 檔案中找到,help.txt。可以從 Vim 內部使用 <Help><F1> 鍵以及 :help 命令(只需輸入 ":help",不含引號或直線)來存取。如果幫助檔案不在預設位置,則可以將 'helpfile' 選項設定為幫助檔案的名稱。您可以使用標籤跳到主題:使用 CTRL-] 跳到游標下的主題,使用 CTRL-T 跳回。
發音
Vim 的發音是一個單字,就像 Jim 一樣。所以 Nvim 的發音是 "En-Vim",兩個音節。
本手冊是所有 Nvim 編輯器和 API 功能的參考。它不是入門手冊;對於初學者,有實作的 導師 和使用者手冊 usr_toc.txt
書籍
有很多關於 Vi 和 Vim 的書籍。我們推薦
Drew Neil 的 "Practical Vim" Drew Neil 的 "Modern Vim" https://vimcasts.org/publications/
"Practical Vim" 以其專注於使用 Vim 快速學習常見編輯任務而聞名。"Modern Vim" 探索了 Nvim 和 Vim 8 中的新功能。
Steve Oualline 的 "Vim - Vi Improved"
這是第一本專門介紹 Vim 的書籍。其中的一部分被包含在使用者手冊中。frombook ISBN: 0735710015 如需更多資訊,請嘗試以下連結:https://iccf-holland.org/click5.html https://www.vim.org/iccf/click5.html

網路上的 Nvim internet

bugs bug-report 在此回報錯誤並請求新功能:https://github.com/neovim/neovim/issues
簡潔但完整。始終提供可重現的範例,並嘗試找出哪些設定或其他因素觸發了錯誤。
如果 Nvim 當機,請嘗試取得回溯追蹤。請參閱 debug.txt

贊助 Vim/Nvim 開發 register

修復錯誤和新增功能需要大量的時間和精力。為了表達您對這項工作的讚賞,並激勵開發人員繼續開發 Vim,請發送捐款。
您捐贈的款項將主要用於幫助烏干達的兒童。請參閱 uganda。但同時捐款也會增加開發團隊繼續開發 Vim 的動力!
有關贊助的最新資訊,請瀏覽 Vim 網站
Nvim 的開發資金與 Vim 分開

貢獻者 credits

Vim 的大部分程式碼是由 Bram Moolenaar <[email protected]> Bram-Moolenaar 所撰寫。
部分文件來自 W.N. Joy、Alan P.W. Hewett 和 Mark Horton 撰寫的數個 Vi 手冊。
Vim 編輯器基於 Stevie,並包含(來自)其他軟體的(想法),這些軟體由這裡提到的人員開發。其他人透過向我發送修補程式、建議以及提供關於 Vim 的優缺點的回饋來提供幫助。
沒有這些人的幫助,Vim 絕不可能發展成現在的樣子!
Ron Aaron Win32 GUI 變更 Mohsin Ahmed 加密 Zoltan Arpadffy 在 VMS 埠上的工作 Tony Andrews Stevie Gert van Antwerpen 在 MS-DOS 上針對 DJGPP 的變更 Berkeley DB(3) 交換檔案實作的想法 Keith Bostic Nvi Walter Briscoe Makefile 更新,各種修補程式 Ralf Brown MS-DOS 的 SPAWNO 程式庫 Robert Colon 許多有用的評論 Marcin Dalecki GTK+ GUI 埠、工具列圖示、gettext() Kayhan Demirel 在烏干達寄給我新聞 Chris & John Downey xvi(多視窗版本的想法) Henk Elbers 第一個 VMS 埠 Daniel Elstner GTK+ 2 埠 Eric Fischer Mac 埠、'cindent' 和其他改進 Benji Fisher 回答了許多使用者問題 Bill Foster Athena GUI 埠(後來移除) Google 讓 Bram 每週有一天可以開發 Vim Loic Grenie xvim(多視窗版本的想法) Sven Guckes Vim 推廣者和以前的 WWW 頁面維護者 Darren Hiebert Exuberant ctags Jason Hildebrand GTK+ 2 埠 Bruce Hunsaker VMS 埠的改進 Andy Kahn Cscope 支援、GTK+ GUI 埠 Oezguer Kesim Vim Mailing Lists 的維護者 Axel Kielhorn 在 Macintosh 埠上的工作 Steve Kirkendall Elvis Roger Knobbe 最初移植到 Windows NT Sergey Laskavy 來自莫斯科的 Vim 協助 Felix von Leitner 以前的 Vim Mailing Lists 維護者 David Leonard Python 擴充功能移植到 Unix Avner Lottem 在由右至左的視窗中編輯 Flemming Madsen X11 用戶端-伺服器、各種功能和修補程式 Tony Mechelynck 回答了許多使用者問題 Paul Moore Python 介面擴充功能,許多修補程式 Katsuhito Nagano 多位元組版本的工作 Sung-Hyun Nam 多位元組版本的工作 Vince Negri Win32 GUI 和通用主控台增強功能 Steve Oualline 第一本 Vim 書籍的作者 frombook Dominique Pelle Valgrind 報告和許多修正 A.Politz 許多錯誤報告和一些修正 George V. Reilly Win32 埠、Win32 GUI 啟動 Stephen Riehm 錯誤收集器 Stefan Roemer 各種修補程式和使用者協助 Ralf Schandl IBM OS/390 埠 Olaf Seibert DICE 和 BeBox 版本、regexp 改進 Mortaza Shiran 波斯語修補程式 Peter da Silva termlib Paul Slootman OS/2 埠 Henry Spencer 正規表示式 Dany St-Amant Macintosh 埠 Tim Thompson Stevie G. R. (Fred) Walter Stevie Sven Verdoolaege Perl 介面 Robert Webb 命令列完成、GUI 版本和許多修補程式 Ingo Wilken Tcl 介面 Mike Williams PostScript 列印 Juergen Weigert Lattice 版本、AUX 改進、Unix 和 MS-DOS 埠、autoconf Stefan 'Sec' Zehl vim.org 的維護者 Yasuhiro Matsumoto 許多 MS-Windows 改進 Ken Takata 修正和功能 Kazunobu Kuriyama GTK 3 Christian Brabandt 許多修正、功能、使用者支援等 Yegappan Lakshmanan 許多快速修復功能
我要感謝所有向我發送錯誤報告和建議的人。這個清單太長,無法在此一一列出。沒有所有這些人的想法,Vim 就不會是現在的樣子:他們讓 Vim 充滿活力! love peace friendship gross-national-happiness
文件可能會參考其他版本的 Vi:Vi vi Vi 「原始版本」。在沒有其他說明的情況下,這是 Sun OS 4.x 中出現的 Vi 版本。":version" 返回 "Version 3.7, 6/7/85"。原始碼僅在取得授權後才可用。Nvi
Nvi 「新」的 Vi。隨附於 BSD 4.4 和 FreeBSD 的 Vi 版本。與原始 Vi 有很好的相容性,並有一些擴充功能。使用的版本是 1.79。":version" 返回 "Version 1.79 (10/23/96)"。原始碼可免費取得。Elvis
Elvis 另一個 Vi 克隆,由 Steve Kirkendall 製作。非常緊湊,但不如 Vim 靈活。原始碼可免費取得。
Vim Nvim 基於 Vim。https://www.vim.org/
Nvim 是 Vim(「Vi IMproved」)文字編輯器的分支,最初由 Bram Moolenaar 開發。在 Nvim 的原始碼中搜尋他的名字,將會發現他有多少工作仍然保留在 Nvim 中。他於 2023 年 8 月 3 日去世,享年 62 歲。如果 Vim 或 Nvim 對您的人生有所幫助,請閱讀 Uganda 並考慮以您認為合適的方式紀念他。

表示法 notation

當使用語法突顯來閱讀時,非逐字輸入的文字通常會使用 Special 群組突顯。這些是 []、{} 和 <> 以及 CTRL-X 中的項目。
請注意,Vim 在命令中使用所有可能的字元。有時,[]、{} 和 <> 是您輸入內容的一部分,上下文應使這點清楚。
[] 方括號中的字元是選用的。
count [count] [count] 一個選用的數字,可以放在命令前面以倍增或迭代命令。如果沒有提供數字,則會使用計數 1,除非另有說明。請注意,在本手冊中,命令的描述中沒有提及 [count],而僅在說明中提及。這樣做的目的是為了更容易查詢命令。如果 'showcmd' 選項開啟,則會在視窗底部顯示(部分)輸入的計數。您可以使用 <Del> 刪除最後一個數字 (N<Del>)。
[quotex]
["x] 一個選用的暫存器指定,可以在其中儲存文字。請參閱 registers。x 是 'a' 到 'z' 或 'A' 到 'Z' 或 '"' 之間的單個字元,在某些情況下(使用 put 命令)是 '0' 到 '9'、'%'、'#' 或其他字元。大寫和小寫字母指定相同的暫存器,但小寫字母用於覆寫先前的暫存器內容,而大寫字母用於附加到先前的暫存器內容。如果沒有 ""x" 或使用 """",則儲存的文字會放入未命名的暫存器中。
{}
{} 大括號表示命令中必須出現的部分,但可以採用多個不同的值。Vim 和 Vi 之間的差異也在大括號中給出(這會從上下文中清楚地看出)。
{char1-char2}
{char1-char2} 從 char1 到 char2 範圍內的單個字元。例如:{a-z} 是一個小寫字母。可以串連多個範圍。例如,{a-zA-Z0-9} 是任何字母數字字元。
{motion} movement {motion} 移動游標的命令。這些在 motion.txt 中說明。範例:w 到下一個字的開頭 b 到目前字的開頭 4j 向下四行 /The<CR> 到下一個出現的 "The" 這是在 operator 命令之後使用,以在要操作的文字上移動。
如果移動包含計數,且操作符號也包含計數,則兩個計數會相乘。例如:「2d3w」會刪除六個單字。
動作可以是向後的,例如 "db" 可以刪除到單字的開頭。
動作也可以是滑鼠點擊。但是並非所有終端機都支援滑鼠。
":omap" 命令可以用於在操作符等待時映射字元。
Ex 命令可以用來移動游標。這可以用來呼叫執行複雜移動的函式。無論使用哪個 ":" 命令,移動始終是字元式獨佔的。這意味著如果不設定 'virtualedit' 選項,就無法在不包含換行符的情況下包含行的最後一個字元。如果 Ex 命令在操作符開始之前變更了文字,或跳轉到另一個緩衝區,則結果是不可預測的。可以在更下方變更文字。如果目前的緩衝區未卸載,則可以跳轉到另一個緩衝區。
{Visual}
{Visual} 一個選取的文字區域。它由 "v"、"V" 或 CTRL-V 命令啟動,然後可以使用任何游標移動命令來變更選取文字的結尾。這會在 操作符 命令之前使用,以突出顯示要操作的文字。請參閱 Visual 模式
<character>
<character> 下表中的特殊字元,可選擇帶有修飾符,或帶有修飾符的單個 ASCII 字元。
'character'
'c' 單個 ASCII 字元。
CTRL-{char}
CTRL-{char} 輸入 {char} 時按下 CTRL 鍵所產生的控制字元。{char} 的大小寫會被忽略;因此 CTRL-ACTRL-a 是等效的。但在某些終端機和環境中,使用 SHIFT 鍵會產生不同的程式碼(例如,CTRL-SHIFT-a);在這些環境中,使用 SHIFT 鍵不會觸發 CTRL-A 等命令。
'option'
'option' 一個選項或參數,可以用單引號括起來設定值。請參閱 選項
quotecommandquote
"command" 以雙引號括起來的、您可以輸入的命令的參考。command 新樣式的命令,這樣可以將它與其他引號文字和字串區分開來。
key-notation key-codes keycodes 這些按鍵的名稱用於文件中。它們也可以與 ":map" 命令一起使用。
notation meaning equivalent decimal value(s)
-----------------------------------------------------------------------
<Nul>CTRL-@ 0 (儲存為 10) <Nul> <BS> 退格鍵 CTRL-H 8 backspace <Tab> tab 鍵 CTRL-I 9 tab Tab linefeed
<NL> 換行符 CTRL-J 10 (用於 <Nul>) <CR> 返回符 CTRL-M 13 carriage-return <Return><CR> 相同 <Return>
<Enter><CR> 相同 <Enter>
<Esc> escape 鍵 CTRL-[ 27 escape <Esc> <Space> 空格鍵 32 space <lt> 小於 < 60 <lt> <Bslash> 反斜線 \ 92 backslash <Bslash> <Bar> 垂直線 | 124 <Bar> <Del> delete 鍵 127 <CSI> 命令序列 intro ALT-Esc 155 <CSI>
<EOL> 行尾 (可以是 <CR><NL><CR><NL>,取決於系統和 'fileformat') <EOL> <Ignore> 取消等待字元 <Ignore>
<NOP> 無操作:不執行任何操作(在映射中很有用)<Nop>
<Up> 向上游標 cursor-up cursor_up <Down> 向下游標 cursor-down cursor_down <Left> 向左游標 cursor-left cursor_left <Right> 向右游標 cursor-right cursor_right <S-Up> shift-向上游標 <S-Down> shift-向下游標 <S-Left> shift-向左游標 <S-Right> shift-向右游標 <C-Left> control-向左游標 <C-Right> control-向右游標 <F1> - <F12> 功能鍵 1 到 12 function_key function-key <S-F1> - <S-F12> shift-功能鍵 1 到 12 <S-F1> <Help> 說明鍵 <Undo> 還原鍵 <Insert> 插入鍵 <Home> Home 鍵 home
<End> End 鍵 end
<PageUp> 向上翻頁鍵 page_up page-up <PageDown> 向下翻頁鍵 page_down page-down <kUp> 數字鍵盤向上游標 keypad-cursor-up
<kDown> 數字鍵盤向下游標 keypad-cursor-down
<kLeft> 數字鍵盤向左游標 keypad-cursor-left
<kRight> 數字鍵盤向右游標 keypad-cursor-right
<kHome> 數字鍵盤 home 鍵 (左上) keypad-home <kEnd> 數字鍵盤 end 鍵 (左下) keypad-end
<kOrigin> 數字鍵盤原點鍵 (中間) keypad-origin
<kPageUp> 數字鍵盤向上翻頁鍵 (右上) keypad-page-up <kPageDown> 數字鍵盤向下翻頁鍵 (右下) keypad-page-down <kDel> 數字鍵盤 delete 鍵 keypad-delete
<kPlus> 數字鍵盤 + 鍵 keypad-plus
<kMinus> 數字鍵盤 - 鍵 keypad-minus
<kMultiply> 數字鍵盤 * 鍵 keypad-multiply
<kDivide> 數字鍵盤 / 鍵 keypad-divide
<kPoint> 數字鍵盤 . 鍵 keypad-point
<kComma> 數字鍵盤 , 鍵 keypad-comma
<kEqual> 數字鍵盤 = 鍵 keypad-equal
<kEnter> 數字鍵盤 Enter 鍵 keypad-enter
<k0> - <k9> 數字鍵盤 0 到 9 keypad-0 keypad-9 <S-…> shift 鍵 shift <S- <C-…> control 鍵 control ctrl <C- <M-…> alt 鍵或 meta 鍵 META ALT <M- <A-…><M-…> 相同 <A-
<T-…> meta 鍵,當它不是 alt 鍵時 <T- <D-…> command 鍵或 "super" 鍵 <D-
-----------------------------------------------------------------------
注意
某些按鍵(<Help><S-Right>、…)的可用性取決於 UI 或主機終端機。
如果 Num Lock 鍵開啟,TUI 會接收純 ASCII 值,因此映射 <k0><k1>、...、<k9><kPoint> 將不起作用。
Nvim 支援使用修飾符 (例如 <M-ä>) 映射多位元組字元。哪些組合實際有效取決於 UI 或主機終端機。
當按下使用 meta 或 alt 修飾符的按鍵,並且該按鍵沒有映射時,Nvim 的行為可能就像在按鍵之前按下了 <Esc> 一樣。
可以標註組合的修飾符 (例如 CTRL-ALT-T<M-C-T>),但您的終端機必須編碼輸入才能使其正常運作。 tui-input
<>
範例通常以 <> 符號表示。有時這樣做只是為了清楚說明您需要輸入的內容,但通常可以照字面輸入,例如使用 ":map" 命令。規則如下:1. 可列印字元直接輸入,除了反斜線和 "<"。2. 反斜線以 "\\"、雙反斜線或 "<Bslash>" 表示。3. 文字 "<" 以 "\<" 或 "<lt>" 表示。在不會造成混淆的情況下,可以直接使用 "<"。4. "<key>" 表示輸入的特殊按鍵(請參閱上表)。範例:<Esc> Esc 鍵 <C-G> CTRL-G <Up> 上方向鍵 <C-LeftMouse> Control + 滑鼠左鍵點擊 <S-F11> Shift + F11 功能鍵 <M-a> Meta + a('a' 的第 8 位元設為 1)<M-A> Meta + A('A' 的第 8 位元設為 1)
<> 符號使用 <lt> 來跳脫按鍵名稱的特殊含義。使用反斜線也可以,但僅限於 'cpoptions' 不包含 'B' 旗標時。
CTRL-H 對應到六個字元 "<Home>" 的範例
:imap <C-H> \<Home>
:imap <C-H> <lt>Home>
第一個範例僅在 'B' 旗標不在 'cpoptions' 中時才有效。第二個範例始終有效。若要在對應中取得文字 "<lt>"
:map <C-L> <lt>lt>
此符號可以用在雙引號字串中,在開頭使用 "\<",例如 "\<C-Space>"。這會產生一個特殊的按鍵碼。若要將其轉換回可讀取的文字,請使用 keytrans()

模式,簡介 vim-modes-intro vim-modes

Vim 有七種基本模式
Normal Normal-mode command-mode 一般模式。在一般模式中,您可以輸入所有一般的編輯器命令。如果您啟動編輯器,就會處於此模式。這也稱為命令模式。
視覺模式。此模式類似於一般模式,但是移動命令會延伸一個醒目顯示的區域。當使用非移動命令時,會對醒目顯示的區域執行該命令。請參閱 Visual-mode。如果 'showmode' 選項開啟,視窗底部會顯示 "-- VISUAL --"。
選取模式。此模式看起來最像 MS-Windows 的選取模式。輸入可列印字元會刪除選取範圍並啟動插入模式。請參閱 Select-mode。如果 'showmode' 選項開啟,視窗底部會顯示 "-- SELECT --"。
插入模式。在插入模式中,您輸入的文字會插入到緩衝區中。請參閱 Insert-mode。如果 'showmode' 選項開啟,視窗底部會顯示 "-- INSERT --"。
命令列模式。在命令列模式(也稱為 Cmdline 模式)中,您可以在視窗底部輸入一行文字。這用於 Ex 命令「:」、模式搜尋命令「?」和「/」以及篩選命令「!」。 Cmdline-mode
Ex 模式。類似於命令列模式,但在輸入命令後,您仍會停留在 Ex 模式中。命令列的編輯功能非常有限。 Ex-mode
終端機模式
終端機模式。在終端機模式中,所有輸入(除了 CTRL-\)都會傳送到目前 終端機 緩衝區中執行的程序。如果按下 CTRL-\,則會傳送下一個按鍵,除非它是 CTRL-N (CTRL-\_CTRL-N) 或 CTRL-O (t_CTRL-\_CTRL-O)。如果 'showmode' 選項開啟,視窗底部會顯示 "-- TERMINAL --"。
還有六種額外模式。這些是基本模式的變體
Operator-pending Operator-pending-mode 運算元等待模式。此模式類似於一般模式,但在運算元命令開始後,Vim 會等待 {motion} 來指定運算元將操作的文字。
取代模式。取代模式是插入模式的特例。您可以執行與插入模式相同的操作,但對於您輸入的每個字元,都會刪除現有文字的一個字元。請參閱 Replace-mode。如果 'showmode' 選項開啟,視窗底部會顯示 "-- REPLACE --"。
虛擬取代模式。虛擬取代模式類似於取代模式,但您取代的是螢幕上的實際空間,而不是檔案中的字元。請參閱 Virtual-Replace-mode。如果 'showmode' 選項開啟,視窗底部會顯示 "-- VREPLACE --"。
插入一般模式。在插入模式中輸入 CTRL-O 時進入(請參閱 i_CTRL-O)。此模式類似於一般模式,但在執行一個命令後,Vim 會返回插入模式。如果 'showmode' 選項開啟,視窗底部會顯示 "-- (insert) --"。
插入視覺模式。當從插入模式啟動視覺選取時進入,例如,使用 CTRL-O,然後使用 "v"、"V" 或 CTRL-V。當視覺選取結束時,Vim 會返回插入模式。如果 'showmode' 選項開啟,視窗底部會顯示 "-- (insert) VISUAL --"。
插入選取模式。當從插入模式啟動選取模式時進入。例如,拖曳滑鼠或 <S-Right>。當選取模式結束時,Vim 會返回插入模式。如果 'showmode' 選項開啟,視窗底部會顯示 "-- (insert) SELECT --"。

在模式之間切換 mode-switching

如果由於任何原因您不知道自己處於哪個模式,您可以隨時輸入 <Esc> 兩次返回一般模式。但這不適用於 Ex 模式,請使用 ":visual"。當您輸入 <Esc> 後看到螢幕閃爍或聽到鈴聲時,就知道自己已返回一般模式。但是,如果在插入模式中使用 CTRL-O 後按下 <Esc>,您會聽到嗶聲,但仍然處於插入模式,請再次輸入 <Esc>
i_esc
從模式到模式
一般 視覺 選取 插入 取代 命令列 Ex
Normal                        v V ^V          *4         *1           R gR     : / ? !   Q
Visual                 *2                  ^G         c C            --              :       --
Select                 *5        ^O ^G                 *6            --              --      --
Insert                 <Esc>          --          --                  <Insert>    --      --
Replace         <Esc>          --          --        <Insert>              --      --
Command-line         `*3`          --          --         :start            --                      --
Ex                 :vi          --          --         --            --              --
-- 不可能
* 1 透過輸入命令 "i"、"I"、"a"、"A"、"o"、"O"、"c"、"C"、"s" 或 S",從一般模式轉換到插入模式。 * 2 透過輸入非移動命令(會導致執行命令)或按下 <Esc>、"v"、"V" 或 "CTRL-V"(請參閱 v_v),從視覺模式轉換到一般模式,後者只會停止視覺模式,而不會產生副作用。 * 3 透過以下方式從命令列模式轉換到一般模式
按下 <CR><NL>,這會導致執行輸入的命令。
刪除整行(例如,使用 CTRL-U),然後輸入最終的 <BS>
按下 CTRL-C<Esc>,這會退出命令列而不執行命令。在最後一種情況下,<Esc> 可能是以 'wildchar' 選項定義的字元,在這種情況下,它會啟動命令列補全。您可以忽略它,然後再次輸入 <Esc>。 * 4 透過以下方式從一般模式轉換到選取模式
'selectmode' 包含 "mouse" 時使用滑鼠選取文字
在按住 Shift 鍵的情況下使用非可列印命令移動游標,並且 'selectmode' 選項包含 "key"
'selectmode' 包含 "cmd" 時使用 "v"、"V" 或 "CTRL-V"
使用 "gh"、"gH" 或 "g CTRL-H" g_CTRL-H * 5 透過使用非可列印命令移動游標而不按住 Shift 鍵,從選取模式轉換到一般模式。 * 6 透過輸入可列印字元,從選取模式轉換到插入模式。選取範圍會被刪除,並且會插入該字元。
CTRL-\_CTRL-N i_CTRL-\_CTRL-N c_CTRL-\_CTRL-N v_CTRL-\_CTRL-N t_CTRL-\_CTRL-N 此外,命令 CTRL-\ CTRL-N<C-\><C-N> 可用於從任何其他模式轉換到一般模式。這可用於確保 Vim 處於一般模式,而不會像 <Esc> 一樣發出嗶聲。但是,這在 Ex 模式中無效。當在採用引數的命令(例如 fm)之後使用時,將套用以 'ttimeoutlen' 設定的逾時時間。
CTRL-\_CTRL-G i_CTRL-\_CTRL-G c_CTRL-\_CTRL-G v_CTRL-\_CTRL-G CTRL-\ CTRL-G 的作用與 CTRL-\_CTRL-N 相同,以實現回溯相容性。
gQ mode-Ex Ex-mode Ex EX E501 gQ 切換到 Ex 模式。這類似於一個接一個地輸入 ":" 命令,除了
您不必一直按下 ":"。
螢幕不會在每個命令後更新。使用 :vi 命令 (:visual) 退出此模式。

視窗內容 window-contents

在一般模式和插入/取代模式中,螢幕視窗將顯示緩衝區的目前內容:所見即所得。有兩種例外情況
'cpoptions' 選項包含 '$',且變更發生在一行中時,文字不會直接刪除,而是在最後一個已刪除的字元處放置一個 '$'。
在一個視窗中插入文字時,在完成插入之前,同一文字上的其他視窗不會更新。
除非關閉 'wrap' 選項(見下方說明),否則超出視窗寬度的行將會換行。'linebreak' 選項可以設定在空白字元處換行。
如果緩衝區最後一行之後視窗還有空間,Vim 會在視窗最後幾行的第一欄顯示 '~',像這樣
+-----------------------+
|some line                |
|last line                |
|~                        |
|~                        |
+-----------------------+
因此,'~' 行表示已到達緩衝區的末尾。
如果視窗中的最後一行不適合顯示,Vim 會在視窗最後幾行的第一欄用 '@' 表示,像這樣
+-----------------------+
|first line                |
|second line                |
|@                        |
|@                        |
+-----------------------+
因此,'@' 行表示有行不適合顯示在視窗中。
'display' 選項中存在 "lastline" 標誌時,您將不會在視窗的左側看到 '@' 字元。如果最後一行不完全適合顯示,則只會顯示適合的部分,並且最後一行的最後三個字元會被 "@@@" 取代,像這樣
+-----------------------+
|first line                |
|second line                |
|a very long line that d|
|oesn't fit in the wi@@@|
+-----------------------+
如果單行太長而無法顯示在視窗中,這是一種特殊情況。Vim 將僅顯示該行游標所在位置附近的部分。不會顯示特殊字元,以便您可以編輯此行的所有部分。
可以使用 hl-NonText 高亮群組為 '@' 和 '~' 字元設定特殊的高亮顯示。這使得可以將它們與緩衝區中的真實字元區分開來。
'showbreak' 選項包含要放在換行符號前面的字串。
wrap-off
如果關閉 'wrap' 選項,則長行將不會換行。只會顯示適合螢幕的部分。如果游標移動到未顯示的行部分,螢幕將會水平捲動。
這種方法的優點是欄會按原樣顯示,並且可以編輯不適合螢幕的行。缺點是您無法一次看到行的所有字元。'sidescroll' 選項可以設定為最小捲動的欄數。
所有正常的 ASCII 字元都會直接顯示在螢幕上。<Tab> 會被替換為它所代表的空格數。其他不可列印的字元會被替換為 "^ {char}",其中 {char} 是加上 64 的不可列印字元。因此,字元 7(響鈴)將顯示為 "^G"。127 到 160 之間的字元會被替換為 "~{char}",其中 {char} 是減去 64 的字元。這些字元在螢幕上佔據多個位置。游標只能定位在第一個位置上。
如果您設定 'number' 選項,則所有行都會在其前面加上行號。提示:如果您不希望換行的行與行號混在一起,請將 'showbreak' 選項設定為八個空格:":set showbreak=\ \ \ \ \ \ \ \ "
如果您設定 'list' 選項,<Tab> 字元將不會顯示為多個空格,而是顯示為 "^I"。'$' 將會放在行的末尾,以便您可以找到尾隨的空格。
在命令列模式下,只會正確顯示命令列本身。一旦您返回到命令模式,緩衝區內容的顯示就會更新。
視窗的最後一行用於顯示狀態和其他訊息。只有在開啟選項時才會使用狀態訊息
狀態訊息選項 預設 Unix 預設
目前模式 'showmode' 開啟 開啟 命令字元 'showcmd' 開啟 關閉 游標位置 'ruler' 關閉 關閉
目前模式為 "-- INSERT --" 或 "-- REPLACE --",請參閱 'showmode'。命令字元是您輸入但尚未使用的字元。
如果您的終端速度較慢,您可以關閉狀態訊息以加快編輯速度
:set nosc noru nosm
如果發生錯誤,錯誤訊息將會顯示至少一秒鐘(反白顯示)。
某些命令會顯示有多少行受到影響。發生這種情況的閾值可以通過 'report' 選項(預設值為 2)來控制。
Vim 名稱和目前檔案名稱的全名將會顯示在標題列中。當視窗調整大小時,Vim 會自動重新繪製視窗。您可以將視窗調整為任意大小,但如果它變得太小,將無法顯示任何一行。使其至少 40 個字元寬,以便能夠讀取最後一行上的大多數訊息。

定義 定義 術語

緩衝區 包含文字行,通常來自檔案。螢幕 Nvim 用於顯示內容的整個區域。視窗 緩衝區的檢視。一個緩衝區可以有多個視窗。框架 視窗保存在框架樹中。每個框架都包含一個欄、列或視窗(「葉」框架)。
螢幕包含一個或多個視窗,這些視窗由狀態列分隔,且底部有命令列。
       +-------------------------------+
screen        | window 1        | window 2        |
       |                |                |
       |                |                |
       |= status line =|= status line =|
       | window 3                        |
       |                                |
       |                                |
       |==== status line ==============|
       |command line                        |
       +-------------------------------+
命令列也用於顯示訊息。當命令列中沒有足夠的空間時,它會向上捲動螢幕。
四種線條類型之間存在差異
緩衝區行 緩衝區中的行。這與從檔案讀取/寫入的行相同。它們可以有數千個字元長。邏輯行 套用摺疊的緩衝區行。封閉摺疊中的緩衝區行會變為單個邏輯行:"+-- 99 lines folded"。它們可以有數千個字元長。視窗行 顯示在視窗中的行:套用了換行、分行符號等的邏輯行範圍。它們只能與視窗的寬度一樣長,較長的行會換行或截斷。螢幕行 Nvim 使用的螢幕行。包含所有視窗的視窗行,並加上狀態列和命令列。它們只能與螢幕的寬度一樣長。當命令列變長時,它會換行,並且會捲動行以騰出空間。
緩衝區行 邏輯行 視窗行 螢幕行
1. one 1. one 1. +-- folded 1. +-- folded 2. two 2. +-- folded 2. five 2. five 3. three 3. five 3. six 3. six 4. four 4. six 4. seven 4. seven 5. five 5. seven 5. === 狀態列 === 6. six 6. aaa 7. seven 7. bbb 8. ccc ccc c 1. aaa 1. aaa 1. aaa 9. cc 2. bbb 2. bbb 2. bbb 10. ddd 3. ccc ccc ccc 3. ccc ccc ccc 3. ccc ccc c 11. ~ 4. ddd 4. ddd 4. cc 12. === 狀態列 === 5. ddd 13. (命令列) 6. ~
API 客戶端
所有外部 UI 和遠端外掛程式(與常規 Vim 外掛程式相反)通常都是「客戶端」;但是,如果某個「API 客戶端」的目的是為了方便其他應用程式而抽象化或包裝 RPC API(就像 REST 客戶端或 SDK(例如 AWS 的 boto3):您可以使用 HTTP 客戶端(例如 curl)與 AWS REST 通訊,但 boto3 會將其包裝在方便的 python 介面中)。例如,Nvim lua-client 是一個 API 客戶端:https://github.com/neovim/lua-client
主機
外掛程式「主機」既是(Nvim API 的)客戶端,也是(外部平台(例如 python)的)伺服器。它是一個託管其他外掛程式的遠端外掛程式。
遠端外掛程式
透過 :UpdateRemotePlugins 註冊的任意程式碼,該程式碼在單獨的程序中執行,並透過 api 與 Nvim 通訊。
主要
命令索引
快速參考