Vim_diff

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


Nvim 與 Vim 的差異
雖然編輯器和 Vimscript (而非 Vim9script) 的功能大多相同,但 Nvim 在許多方面與 Vim 不同。此文件完整且集中地列出這些差異。

設定 nvim-config

使用者設定和資料檔案位於標準的 基本目錄 中 (另請參閱 $NVIM_APPNAME)。特別注意:
使用 $XDG_CONFIG_HOME/nvim/init.vim 而不是 .vimrc 作為你的 設定
使用 $XDG_CONFIG_HOME/nvim 而不是 .vim 來儲存設定檔案。
使用 $XDG_STATE_HOME/nvim/shada/main.shada 而不是 .viminfo 來儲存持續性工作階段資訊。 shada

預設值 nvim-defaults

預設啟用檔案類型偵測。可以透過在 init.vim 中加入 ":filetype off" 來停用。
預設啟用語法高亮。可以透過在 init.vim 中加入 ":syntax off" 來停用。
預設配色方案已更新。由於配色方案仰賴預設如何定義高亮群組,這可能導致配色方案看起來不同。在 init.vim 中加入 ":colorscheme vim" 或在配色方案檔案中加入 ":source $VIMRUNTIME/colors/vim.lua" 來還原舊的預設連結和顏色。
'autoindent' 已啟用
'autoread' 已啟用 (適用於所有 UI,包括終端機)
'background' 預設為 "dark" (除非由終端機/UI 自動設定)
'backspace' 預設為 "indent,eol,start"
'backupdir' 預設為 .,~/.local/state/nvim/backup// (xdg),自動建立
'belloff' 預設為 "all"
'comments' 包含 "fb:•"
'commentstring' 預設為 ""
'compatible' 永遠停用
'complete' 排除 "i"
'define' 預設為 ""。C ftplugin 將其設定為 "^\\s*#\\s*define"
'directory' 預設為 ~/.local/state/nvim/swap// (xdg),自動建立
'display' 預設為 "lastline"
'encoding' 為 UTF-8 (對照 'fileencoding',用於檔案內容編碼)
'fillchars' 預設 (實際上) 為 "vert:│,fold:·,foldsep:│"
'formatoptions' 預設為 "tcqj"
'grepprg' 為一般 grep 使用 -H 和 -I 旗標,並且在可用時預設使用 ripgrep
'hidden' 已啟用
'history' 預設為 10000 (最大值)
'hlsearch' 已啟用
'include' 預設為 ""。C ftplugin 將其設定為 "^\\s*#\\s*include"
'incsearch' 已啟用
'isfname' 不包含 ":" (在 Windows 上)。磁碟機代號無需此符號即可正確處理。(使用 gF 處理以 ":line:col" 為後綴的檔案路徑)。
'joinspaces' 已停用
'jumpoptions' 預設為 "clean"
'langnoremap' 已啟用
'langremap' 已停用
'laststatus' 預設為 2 (狀態列始終顯示)
'listchars' 預設為 "tab:> ,trail:-,nbsp:+"
'mouse' 預設為 "nvi",請參閱 default-mouse 了解詳細資訊
'mousemodel' 預設為 "popup_setpos"
'nrformats' 預設為 "bin,hex"
'path' 預設為 ".,,"。如果存在,C ftplugin 會加入 "/usr/include"。
'ruler' 已啟用
'sessionoptions' 包含 "unix,slash",排除 "options"
'shortmess' 包含 "CF",排除 "S"
'showcmd' 已啟用
'sidescroll' 預設為 1
'smarttab' 已啟用
'startofline' 已停用
'switchbuf' 預設為 "uselast"
'tabpagemax' 預設為 50
'tags' 預設為 "./tags;,tags"
如果 Nvim 可以偵測到主機終端機的支援,則預設啟用 'termguicolors'
'ttimeout' 已啟用
'ttimeoutlen' 預設為 50
'ttyfast' 始終設定
'undodir' 預設為 ~/.local/state/nvim/undo// (xdg),自動建立
'viewoptions' 包含 "unix,slash",排除 "options"
'viminfo' 包含 "!"
'wildmenu' 已啟用
'wildoptions' 預設為 "pum,tagfile"
啟用 editorconfig 外掛程式,套用 .editorconfig 設定。
啟用 man.lua 外掛程式,因此預設可使用 :Man
已啟用 matchit 外掛程式。要在你的設定中停用它:
:let loaded_matchit = 1
g:vimsyn_embed 預設為 "l",以啟用 Lua 高亮。

預設滑鼠

default-mouse disable-mouse 預設啟用滑鼠。這表示 scroll-mouse-wheel 會捲動視窗而不是移動游標;<LeftMouse> 按一下會放置游標;而 <RightMouse> 按一下會開啟包含標準動作的預設 彈出式選單
滑鼠在 命令列模式more 提示中不會啟用,因此你可以透過輸入 ":" 來暫時停用它。或者,如果你想要部分或完全停用滑鼠或彈出式選單,請執行以下任一操作:
透過取消設定 'mouse' 選項來完全停用滑鼠
set mouse=
變更 'mousemodel',因此 <RightMouse> 會擴展選取範圍,而不是顯示彈出式選單
set mousemodel=extend
對應 <A-LeftMouse>,使其在游標移動前暫時停用滑鼠
nnoremap <A-LeftMouse> <Cmd>
  \ set mouse=<Bar>
  \ echo 'mouse OFF until next cursor-move'<Bar>
  \ autocmd CursorMoved * ++once set mouse&<Bar>
  \ echo 'mouse ON'<CR>
若要移除預設彈出式選單,但不停用滑鼠:
aunmenu PopUp
autocmd! nvim_popupmenu
僅移除 "How-to disable mouse" 選單項目 (及其分隔符號)
aunmenu PopUp.How-to\ disable\ mouse
aunmenu PopUp.-2-

預設對應

default-mappings
Nvim 在 啟動時會建立以下預設對應。你可以透過在你的設定中簡單地移除對應來停用其中任何一個,例如 ":unmap Y"。

預設自動指令

default-autocmds
預設自動指令存在於以下群組中。使用 ":autocmd! {group}" 來移除它們,使用 ":autocmd {group}" 來查看它們的定義。
nvim_terminal
BufReadCmd:將 "term://" 緩衝區視為 終端機 緩衝區。terminal-start
TermClose:以不帶任何參數啟動 (因此使用 'shell') 且在結束時未發生錯誤的 終端機 緩衝區會自動關閉。
TermRequest:終端機模擬器會回應 OSC 背景和前景要求,當 Nvim 選項 'background' 為 "dark" 時,指示 (1) 黑色背景和白色前景,或者當 'background' 為 "light" 時,指示 (2) 白色背景和黑色前景。雖然這可能無法反映實際的前景/背景顏色,但允許將 'background' 保留給在終端機模擬器中執行的巢狀 Nvim 執行個體。
TermOpen:設定 終端機 緩衝區的預設選項
'undolevels' 設定為 -1
'textwidth' 設定為 0
nvim_cmdwin
CmdwinEnter:在 cmdwin 中,將語法同步限制為 maxlines=1。
nvim_swapfile
SwapExists:當交換檔案由正在執行的 Nvim 程序擁有時,跳過交換檔案提示 (將 v:swapchoice 設定為 "e")。顯示 W325 "忽略交換檔案…" 訊息。

新功能 nvim-features

主要元件

API API
工作控制 job-control
LSP 框架 lsp
Lua 腳本 lua
剖析引擎 treesitter
供應器
Node.js 外掛程式 provider-nodejs
Python 外掛程式 provider-python
Ruby 外掛程式 provider-ruby
遠端外掛程式 remote-plugin
共享資料 shada
終端機模擬器 terminal
Vimscript 剖析器 nvim_parse_expression()
XDG 基本目錄 xdg

使用者體驗

以直觀且一致的方式工作是 Nvim 的主要目標。
feature-compile
相較於 Vim(提供超過 100 種可選功能的各種組合),Nvim 總是包含**所有**功能。feature-compile 可以把它想成是 Vim "HUGE" 建構版本的精簡版。這樣可以減少錯誤發生的可能性,並消除使用者常見的混淆和摩擦來源。
Nvim 避免使用無法在所有平台上提供的功能;而是將其委派給外部外掛/擴充功能。例如,Vim 中 "有時" 可用的平台特定選項 -X (可能會產生意外: https://stackoverflow.com/q/14635295)。
Vim 的內部測試函數(test_autochdir()、test_settime() 等)不公開(也沒有實作);相對地,Nvim 具有健全的 API。
如果行為、選項和文件花費使用者過多時間,而不是節省時間,則會被移除。
在效益大於任何向後相容性成本的情況下,可用性細節已得到改進。以下是一些例子
會自動建立 'directory''undodir' 的目錄。
在可能的情況下,會啟用終端機功能,例如 'guicursor'
重新設計了各種 "nvim" cli-arguments
內建一些原本需要外部外掛的功能
高亮顯示複製的區域,請參閱 vim.hl

架構

Nvim UI 與核心編輯器「解耦」:所有 UI,包括內建的 TUI,都只是連接到 Nvim 伺服器的外掛(透過 --server--embed)。多個 Nvim UI 客戶端可以連線到同一個 Nvim 編輯器伺服器。
外部外掛在獨立的處理程序中執行。remote-plugin 這提高了穩定性,並允許這些外掛在不阻塞編輯器的情況下工作。即使使用舊的 Vim 介面(if_pythif_ruby)的「傳統」Python 和 Ruby 外掛也是在外部處理程序中執行,因此它們不會導致 Nvim 崩潰。
平台和 I/O 設施建立在 libuv 之上。Nvim 受益於 libuv 的功能和錯誤修復,其他專案也受益於 Nvim 開發人員對 libuv 的改進。

功能

命令列
使用內建的 Vimscript 表達式解析器高亮顯示表達式提示 (@=, c_CTRL-R_=, i_CTRL-R_=)。expr-highlight
E5408 E5409 input()inputdialog() 支援自訂高亮顯示。input()-highlight
(實驗性)g:Nvim_color_cmdline 命令列 (:) 由 g:Nvim_color_cmdline 中定義的回呼進行著色(此回呼僅用於測試,未來將會移除)。
指令
:drop 永遠可用
:Man 預設可用,並具有許多改進,例如補全
可以在定義高亮群組之前調用 :match
:source 可與 Lua 一起使用。使用者命令可以支援 :command-preview 以在您輸入時顯示結果
帶有 "++p" 旗標的 :write 會建立父目錄。
函數
每當 Dict 被修改時,dictwatcheradd() 會通知回呼
msgpackdump()msgpackparse() 提供 msgpack 序列化/反序列化
system()systemlist() 可以直接執行 {cmd}(不使用 'shell'
可以在定義高亮群組之前調用 matchadd()
如果 Nvim tempdir 消失,tempname() 會嘗試恢復。
帶有 "p" 旗標的 writefile() 會建立父目錄。
高亮群組
highlight-blend 控制高亮群組的混合等級
expr-highlight 高亮群組(以 "Nvim" 為字首)
hl-NormalFloat 高亮顯示浮動視窗
hl-FloatBorder 高亮顯示浮動視窗的邊框
hl-FloatTitle 高亮顯示浮動視窗的標題
hl-FloatFooter 高亮顯示浮動視窗的頁腳
hl-NormalNC 高亮顯示非目前視窗
hl-MsgArea 高亮顯示訊息/命令列區域
hl-MsgSeparator 高亮顯示滾動訊息的分隔符
hl-WinSeparator 高亮顯示視窗分隔符
hl-Whitespace 高亮顯示 'listchars' 空白字元
hl-WinBar 高亮顯示 'winbar'
hl-WinBarNC 高亮顯示非目前視窗的 'winbar'
輸入/對應
ALT (META) 組合鍵永遠有效(即使在 TUI 中)。使用任何按鍵對應 <M-<M-1><M-BS><M-Del><M-Ins><M-/><M-\><M-Space><M-Enter> 等。
區分大小寫:<M-a><M-A> 是兩個不同的鍵碼。
如果未對應,ALT 的行為可能類似於 <Esc>i_ALT v_ALT c_ALT
一般命令
gO 顯示目前緩衝區的檔案類型定義的「大綱」。
Q 會重播上次錄製的巨集,而不是切換到 Ex 模式 (gQ)。
選項
:set {option}< 會移除所有 global-local 選項的本機值。
:setlocal {option}< 會將所有選項的廣域值複製到本機值。
如果終端機支援「焦點」事件,'autoread' 在終端機中有效
'cpoptions' 旗標:cpo-_
'diffopt' "linematch" 功能
'exrc' 搜尋 ".nvim.lua"、".nvimrc" 或 ".exrc" 檔案。會提示使用者是否信任該檔案。
'fillchars' 旗標:"msgsep"、"horiz"、"horizup"、"horizdown"、"vertleft"、"vertright"、"verthoriz"
'foldcolumn' 最多支援 9 個動態/固定欄位
'guicursor' 在終端機 (TUI) 中有效
'inccommand' 顯示類似 :substitute 命令和 :command-preview 命令的互動式結果
在跳躍列表中移動時,「view」會嘗試還原 mark-view
「clean」會從跳躍列表中移除未載入的緩衝區。
跳躍列表、變更列表、替代檔案或使用 mark-motions
'laststatus' 廣域狀態列支援
'mousescroll' 使用滑鼠滾動時要滾動的數量
'pumblend' 偽透明快顯功能表
"F" 旗標不會影響自動命令的輸出。
"q" 旗標會完全隱藏巨集錄製訊息。
'signcolumn' 最多支援 9 個動態/固定欄位
'statuscolumn' 使用 'statusline' 格式完全控制欄位
'tabline' 在標籤頁標籤上按下滑鼠中鍵會關閉標籤頁,並且 %@Func@foo%X 可以在滑鼠點擊時呼叫任何函數
簡化了 'ttimeout''ttimeoutlen' 的行為
'winblend' 浮動視窗中的偽透明 api-floatwin
'winhighlight' 視窗本機高亮顯示
供應器
如果您的 $PATH 中有可用的 Python 解譯器,則 :python:python3 永遠可用。請參閱 provider-python
Shell
Shell 輸出 (:!:make、…) 永遠會透過 UI 傳遞,因此不會「搞亂」螢幕。(如果您想搞亂螢幕,仍然可以使用 "chansend(v:stderr,…)")
如果輸出太多,Nvim 會限制(略過)來自 shell 命令 (:!:grep:make) 的訊息。不會遺失任何資料,這只會影響顯示並提高效能。:terminal 輸出永遠不會受到限制。
:! 不支援「互動式」命令。請改用 :terminal。(GUI Vim 有類似的限制,請參閱 Vim 中的 ":help gui-pty"。)
:!start 在 Windows 上不是特殊情況。
system() 不支援寫入/讀取「背景化」的命令。E5677
標記
如果刪除相關聯的行,則會移除標記。
如果使用相同的識別碼在同一群組中放置兩次標記,則會移動標記。
啟動
-e-es 會呼叫與 -E 和 -Es 相同的「改進的 Ex 模式」。
-E-Es 會將 stdin 作為文字讀取(放入緩衝區 1)。
-es-Es 具有改進的行為
會自動退出,不需要 "-c qa!"。
略過交換檔案對話方塊。
如果腳本名稱為 "-",-s 會從 stdin 讀取一般命令。
從 stdin 讀取文字(而不是命令) --
預設有效:"-" 檔案是選用的
在更多情況下有效:-Es、檔案引數
TUI::set-termcap
使用 'verbose' 等級 3 啟動 Nvim 以顯示終端機功能
nvim -V3
'term' E529 E530 E531
'term' 反映從 $TERM 和其他環境檢查推斷出的終端機類型。僅用於除錯;在啟動期間不可靠。
:echo &term
"builtin_x" 表示選擇了 builtin-terms 中的一個,因為在系統上找不到預期的 terminfo 檔案。
Nvim 將在 Linux 虛擬終端機上使用 256 色功能。Vim 在 Linux VT 上只使用 8 種顏色加上亮前景。
Vim 會將其 builtin-terms 中的內容與從 terminfo 讀取的內容組合在一起,並具有 'ttybuiltin' 設定來控制該組合的工作方式。Nvim 使用其中一個,它不會嘗試合併兩者。
UI/顯示
Visual 選取會高亮顯示游標所在的字元。visual-use
訊息:當顯示長度超過 'cmdheight' 的訊息時,只會捲動訊息行,而不是整個螢幕。分隔符號線會由 hl-MsgSeparator'fillchars' 的 "msgsep" 旗標裝飾。msgsep
變數
v:progpath 永遠是絕對的(「完整的」)
v:windowid 永遠可用(供外部 UI 使用)
OptionSet 自動命令引數 v:option_newv:option_old
v:option_oldlocalv:option_oldglobal 具有選項的類型,而不是永遠是字串。v:option_old 現在是所有廣域本機選項的舊廣域值,而不只是字串廣域本機選項。
Vimscript
巢狀在 execute() 中的 :redir 有效。

上游功能 nvim-upstreamed

這些 Nvim 功能後來被整合到 Vim 中。
'fillchars' 旗標:"eob"
'jumpoptions' "stack" 行為
'wildoptions' 旗標:"pum" 啟用 wildmode 補全的快顯選單
:sign-define "numhl" 引數
:source 可用於匿名(無檔案)腳本
'statusline' 支援無限數量的對齊區段

其他變更 nvim-changed

本節記錄各種底層行為的變更。
mkdir() 行為已變更
1. 假設 /tmp/foo 不存在且 /tmp 可寫入,則 mkdir('/tmp/foo/bar', 'p', 0700) 將會建立 /tmp/foo 和 /tmp/foo/bar,權限皆為 0700。Vim 的 mkdir 會建立 /tmp/foo,權限為 0755。
2. 如果嘗試使用 'p' 建立一個已存在的目錄(例如 mkdir('/', 'p')),mkdir() 會靜默結束。在 Vim 中,這會產生錯誤。
3. 現在 mkdir() 的錯誤訊息會在 mkdir 失敗時包含 strerror() 文字。
string():echo 行為已變更
1. 不會對巢狀容器結構套用最大遞迴深度限制。
2. string() 會在遇到巢狀容器時立即失敗,而不是在超過遞迴限制時失敗。
3. 當 :echo 遇到重複的容器,例如
let l = []
echo [l, l]
它不會使用 "[...]"(原為:"[[], [...]]",現在為:"[[], []]")。"..." 僅用於遞迴容器。
4. :echo 列印巢狀容器會在 "..." 後面加入 "@level",表示印出遞迴容器的層級::echo-self-refer。同樣的事情也適用於 string() (雖然它使用類似 "{E724@level}" 的結構),但由於 string() 仍會持續產生錯誤,因此這並不可靠。
5. 現在無限和 NaN 值的字串化會使用 str2float(),並且可以重新評估。
6. (內部)在 Vim 中嘗試列印或字串化 VAR_UNKNOWN 會導致沒有結果,並產生 E908 錯誤,在 Nvim 中則會產生內部錯誤。
json_decode() 行為已變更
1. 它可能會輸出 msgpack-special-dict
2. 在遇到重複鍵時也會發出 msgpack-special-dict,而在 Vim 中則會產生錯誤。
3. 它只接受有效的 JSON。不接受結尾逗號。
json_encode() 行為略有變更:現在接受 msgpack-special-dict 值,但不接受 v:none
Viminfo 文字檔案已被二進位(messagepack)shada 檔案取代。其他差異
shada-c 無效。
shada-s 現在限制每個項目的大小,而不僅僅是暫存器。
'viminfo' 選項已重新命名為 'shada'。為了相容性,舊選項會保留作為別名。
:wviminfo 已重新命名為 :wshada:rviminfo 已重新命名為 :rshada。舊命令仍然保留。
ShaDa 檔案格式的設計考量了向前和向後相容性。shada-compatibility
有些錯誤會導致 ShaDa 程式碼將暫存檔案保留在原地,讓使用者決定如何處理。Vim 會在這些情況下刪除暫存檔案。shada-error-handling
ShaDa 檔案會保留搜尋方向(v:searchforward),viminfo 則不會。
printf()%p 引數一起使用時會傳回有意義的內容:在 Vim 中,它過去會傳回無用的字串位址(字串會被複製到新分配的記憶體中),並且在無法強制轉換為字串的類型上會失敗。詳情請參閱 id(),目前它在內部使用 printf("%p", {expr})
c_CTRL-R 將非特殊暫存器貼到 cmdline 中時,會省略最後的 <CR>
當在視窗之間移動時,會觸發 CursorMoved
Lua 介面(lua.txt
:lua print("a\0b") 會印出 a^@b,就像 :echomsg "a\nb" 一樣。在 Vim 中,會將 ab 印在不同的行上,就像 :lua print("a\nb") 一樣。
:lua error('TEST') 會發出錯誤訊息
E5108: Error executing lua: [string "<Vimscript compiled string>"]:1: TEST
而 Vim 只會發出 "TEST"。
Lua 可透過 vim.api 直接存取 Nvim API
Lua 的 package.path 和 package.cpath 會根據 'runtimepath' 自動更新。lua-module-load
指令
:doautocmd 不會警告 "No matching autocommands"。
:wincmd 接受計數。
如果檔案在外部被更新,:write! 不會顯示提示。
:= 不接受 ex-flags。帶有引數時,它等同於 :lua=
命令列
方向鍵的含義不會根據 'wildoptions' 而改變。
函數
input()inputdialog() 支援彼此的功能(分別為取消時傳回和補全),透過字典引數(如果使用,會取代所有其他引數),並且 "cancelreturn" 如果以字典形式傳遞,則可以有任何類型。
input()inputdialog() 支援使用者自訂的 cmdline 反白。
高亮群組
hl-ColorColumnhl-CursorColumn 的優先順序低於大多數其他群組
hl-CursorLine 的優先順序很低,除非設定了前景色
反白群組名稱允許包含 @ 字元。
定義不符合正規表示式 [a-zA-Z0-9_.@-]* 的名稱的反白群組會發生錯誤(請參閱 group-name)。
hl-StatusLineTerm hl-StatusLineTermNC 被實作為 'winhighlight' 視窗本機反白,由預設的 TermOpen 處理常式設定。
ins-completion-menu 具有層疊的反白樣式。hl-PmenuSelhl-PmenuMatch 都繼承自 hl-Pmenu,而 hl-PmenuMatchSel 則繼承自 hl-PmenuSelhl-PmenuMatch
巨集(recording)行為
重播在 :lmap 期間錄製的巨集會產生與錄製時相同的動作。在 Vim 中,如果在使用 :lmap'ped 鍵時錄製巨集,則錄製和重播期間的行為會有所不同。
'keymap' 是透過 :lmap 而非 :lnoremap 實作,因此您可以同時使用巨集和 'keymap'。這也表示您可以在 'keymap' 的按鍵結果上使用 :imap
對應
為可簡化的按鍵 (例如 <C-I>) 建立對應不會取代其簡化形式 (例如 <Tab>) 的現有對應。
以 "#" 開頭並接數字的字串,在對應的左側不代表功能鍵。
移動
jumplist 避免了無用/虛假的跳躍。
效能
在插入模式期間不會更新摺疊。
語法反白
syncolor.vim 已移除。現在,Nvim 會自動為淺色和深色背景設定預設反白群組,無論是否啟用語法反白。這表示 :syntax-on:syntax-enable 現在是相同的。先前使用 after/syntax/syncolor.vim 檔案的使用者應將該檔案轉換為配色。:colorscheme
Vimscript 相容性
count 不會別名為 v:count
errmsg 不會別名為 v:errmsg
shell_error 不會別名為 v:shell_error
this_session 不會別名為 v:this_session
工作目錄(Vim 在 Nvim 之後實作了其中一些)
當切換到另一個視窗或索引標籤時,可能會觸發 DirChangedDirChangedPre
如果找不到索引標籤頁面或視窗,getcwd()haslocaldir() 可能會擲回錯誤。E5000 E5001 E5002
如果僅傳遞 -1 作為視窗編號,haslocaldir() 會檢查索引標籤本機目錄,且其唯一可能的回傳值為 0 和 1。
getcwd(-1) 等同於 getcwd(-1, 0),而不是傳回全域工作目錄。請使用 getcwd(-1, -1) 來取得全域工作目錄。
自動指令
修正巢狀自動指令執行中的不一致行為:https://github.com/neovim/neovim/issues/23368
對於從終端機收到的任何 OSC 序列,都會觸發 TermResponse,而不是主要裝置屬性回應。v:termresponse

遺失的功能 nvim-missing

這些舊版 Vim 功能尚未實作

移除的舊版功能 nvim-removed

這些 Vim 功能已從 Nvim 中故意移除。
別名
ex (別名為 "nvim -e")
exim (別名為 "nvim -E")
gex (GUI)
gview (GUI)
gvim (GUI)
gvimdiff (GUI)
rgview (GUI)
rgvim (GUI)
rview
rvim
view (別名為 "nvim -R")
vimdiff (別名為 "nvim -d" diff-mode)
指令
:behave
:fixdel
hardcopy :hardcopy 已移除。請改用 :TOhtml 並使用網頁瀏覽器或其他 HTML 檢視器列印產生的 HTML。
:helpfind
:mode (不再接受引數)
:open
:Print
:promptfind
:promptrepl
:scriptversion (永遠是版本 1)
:shell
:sleep! (不會隱藏游標;與 :sleep 相同)
:smile
:tearoff
:cstag
:cscope
:lcscope
:scscope
:Vimuntar
:TOhtml 已被 Lua 版本取代(具有各種差異)
編譯時期功能
Emacs 標籤支援
X11 整合 (參見 x11-selection)
Cscope: cscope
Cscope 支援已被移除,改用基於外掛的解決方案,例如:https://github.com/dhananjaylatkar/cscope_maps.nvim
Eval
Vim9script
v:none (Vim 用來表示 JavaScript "undefined" 的值); 請改用 v:null
事件
SigUSR1 請改用 Signal 來偵測 SIGUSR1 訊號。
選項
antialias
'backspace' 不再支援數字值。請改用
對於 backspace=0 設定 backspace= (空白)
對於 backspace=1 設定 backspace=indent,eol
對於 backspace=2 設定 backspace=indent,eol,start (Nvim 的預設行為)
對於 backspace=3 設定 backspace=indent,eol,nostop
bioskey (MS-DOS)
conskey (MS-DOS)
'cp' 'nocompatible' 'nocp' 'compatible' (Nvim 永遠是 "nocompatible"。)
'cpoptions' (gjpkHw<*- 和所有 POSIX 旗標已被移除)
'cryptmethod' 'cm' 'key' (Vim 加密實作)
cscopepathcomp
cscopeprg
cscopequickfix
cscoperelative
cscopetag
cscopetagorder
cscopeverbose
'encoding' ("utf-8" 總是會被使用)
esckeys
'guioptions' "t" 旗標已被移除
'guifontset' 'gfs' (請改用 'guifont'。)
'guipty' (Nvim 在所有平台上都一致地使用管道和 PTY。)
'highlight' (內建的 highlight-groups 名稱無法被更改。)
'hkmap' 'hk' 請改用 set keymap=hebrew
'hkmapp' 'hkp' 請改用 set keymap=hebrewp
keyprotocol
'pastetoggle' 'pt' 直接貼上即可。™ 當您使用終端機或 GUI 的貼上功能 (CTRL-SHIFT-v, CMD-v (macOS), 滑鼠中鍵點擊, …) 貼上文字時,paste 會自動處理。
'insertmode' 'im' 使用以下腳本來模擬 'insertmode'
autocmd BufWinEnter * startinsert
inoremap <Esc> <C-X><C-Z><C-]>
inoremap <C-C> <C-X><C-Z>
inoremap <C-L> <C-X><C-Z><C-]><Esc>
inoremap <C-Z> <C-X><C-Z><Cmd>suspend<CR>
noremap <C-C> <Esc>
snoremap <C-C> <Esc>
noremap <C-\><C-G> <C-\><C-N><Cmd>startinsert<CR>
cnoremap <C-\><C-G> <C-\><C-N><Cmd>startinsert<CR>
inoremap <C-\><C-G> <C-X><C-Z>
autocmd CmdWinEnter * noremap <buffer> <C-C> <C-C>
autocmd CmdWinEnter * inoremap <buffer> <C-C> <C-C>
lua << EOF
  vim.on_key(function(c)
    if c == '\27' then
      local mode = vim.api.nvim_get_mode().mode
      if mode:find('^[nvV\22sS\19]') and vim.fn.getcmdtype() == '' then
        vim.schedule(function()
          vim.cmd('startinsert')
        end)
      end
    end
  end)
EOF
'maxcombine' 'mco': Nvim 計算的是位元組的最大字元大小,而非碼點。這保證足夠大,始終能正確容納在 vim 中顯示的所有字元,並且 'maxcombine' 設定為 6。
您仍然可以編輯大於螢幕緩衝區的字元,只是您看不到它們。使用 g8ga。參見 mbyte-combining
注意: regex 引擎仍有硬式編碼的限制,僅考慮 6 個組合字元。
'maxmem' Nvim 將記憶體管理委派給作業系統。
'maxmemtot' Nvim 將記憶體管理委派給作業系統。
printoptions
'secure':在 'exrc' 檔案中允許所有操作,因為它們必須被明確標記為 "受信任"。
'shortmess' 旗標:shm-f shm-n shm-x shm-i (行為如同總是開啟)
'termencoding' 'tenc' (Vim 7.4.852 也為 Windows 移除了這個選項)
'terse' 'noterse' (請改為將 "s" 加入 'shortmess')
textauto
textmode
weirdinvert
外掛
logiPat
rrhelper
macmap.vim
tools/check_colors.vim
macros/{justify,matchit,shellmenu,swapmous}.vim: 請直接使用 packadd! justify 等命令
供應器
if_lua:Nvim 的 Lua API 與 Vim 的 "if_lua" 不相容。
啟動
--literal: 檔案引數永遠是文字形式;若要在 Windows 上展開萬用字元,請使用 :n 例如 nvim +"n *"
簡易模式:eview, evim, nvim -y
受限模式:rview, rvim, nvim -Z
Vi 模式:nvim -v
測試函式
test_alloc_fail()
test_autochdir()
test_disable_char_avail()
test_feedinput()
test_garbagecollect_soon
test_getvalue()
test_ignore_error()
test_null_blob()
test_null_channel()
test_null_dict()
test_null_function()
test_null_job()
test_null_list()
test_null_partial()
test_null_string()
test_option_not_set()
test_override()
test_refcount()
test_scrollbar()
test_setmouse()
test_settime()
test_srand_seed()
TUI: t_xx termcap-options t_AB t_Sb t_vb t_SI
Nvim 沒有特殊的 t_XX 選項或 <t_XX> 按鍵碼來設定終端機功能。相反地,Nvim 將終端機視為任何其他 UI,例如,'guicursor' 會在可能的情況下設定終端機游標樣式。
termcap
Nvim 永遠不會使用 termcap 資料庫,只會使用 terminfobuiltin-terms
xterm-8bit xterm-8-bit
Xterm 可以在使用真實 8 位元 CSI 的模式下執行。要支援這個功能,需要自動偵測終端機是否處於 UTF-8 模式或非 UTF-8 模式,因為在不同模式下,8 位元 CSI 字元的寫入方式會有所不同。Vim 在啟動時會向終端機發出「請求版本」序列,並檢視終端機如何傳送 CSI。Nvim 不會發出此類序列,並且總是使用 7 位元控制序列。
主要
命令索引
快速參考