News-0.9

Nvim :help 頁面,使用 產生來源,並使用 tree-sitter-vimdoc 解析器。


自 Nvim 0.8 以來的重要變更

重大變更

下列變更可能需要調整使用者設定或外掛程式。
現在已移除 Cscope 支援 (請參閱 cscopenvim-removed)
已移除的指令
:cscope
:lcscope
:scscope
:cstag
已移除的選項
cscopepathcomp
cscopeprg
cscopequickfix
cscoperelative
cscopetag
cscopetagorder
cscopeverbose
已移除的 Eval 函式
cscope_connection()
注意: 仍然支援 ctags,且無移除計畫。
請參閱 https://github.com/neovim/neovim/pull/20545 以取得更多資訊。
現在已移除 :hardcopy (請參閱 hardcopynvim-removed)
已移除的指令
:hardcopy
已移除的選項
printdevice
printencoding
printexpr
printfont
printheader
printmbcharset
'paste' 選項現在已棄用,並且已移除 'pastetoggle'paste 在 GUI 和終端機 (TUI) Nvim 中會自動運作。直接貼上即可。™
現在會回傳 string,而不是 string|string[]|nil
已移除 concat 選項,因為它未被一致地應用。
無效範圍現在會導致錯誤,而不是回傳 nil
help treesitter 解析器已重新命名為 vimdoc。唯一使用者可見的變更是,特定語言的醒目提示群組需要從 @foo.help 重新命名為 @foo.vimdoc
'commentstring' 的預設值現在是空的,而不是 "/*%s*/"。
libiconv 和 intl 現在是必要的建置相依性。

新功能

新增了下列新 API 或功能。
help 檔案的 Treesitter 語法醒目提示現在支援醒目提示的程式碼範例。若要啟用,請建立一個 .config/nvim/ftplugin/help.lua,內容如下
vim.treesitter.start()
注意: 醒目提示的程式碼範例僅適用於 Nvim 手冊,而不適用於從 Vim 取得的說明檔案。treesitter vimdoc 解析器也在開發中,且無法保證正確醒目提示每個說明檔案。
為 LSP 用戶端新增了對語義符號醒目提示的支援。當支援此功能的用戶端附加到緩衝區時,預設會啟用此功能。可以透過在 LspAttach 回呼中,從 LSP 用戶端的 {server_capabilities} 刪除 semanticTokensProvider 來退出。
請參閱 lsp-semantic-highlight 以取得更多資訊。
vim.inspect_pos()vim.show_pos():Inspect 允許使用者取得或顯示指定緩衝區位置的項目。目前這包括 treesitter 擷取、LSP 語義符號、語法群組和 extmark。
vim.treesitter.inspect_tree():InspectTree 會開啟一個分割視窗,顯示目前緩衝區的語言樹狀結構中節點的文字表示。
'statuscolumn' 選項,可自訂視窗側邊的區域,通常包含摺疊、符號和數字欄。這個新的選項遵循 'statusline' 語法,可用於轉換行號、建立 符號 的滑鼠點擊回呼、引入自訂邊界或分隔符號等。
vim.secure.trust():trust 允許使用者管理信任資料庫中的檔案。vim.secure.read() 會讀取檔案,並在應該信任時提示使用者,如果信任,則會回傳檔案內容。由 'exrc' 使用。
現在內建了 EditorConfig 支援。預設會啟用此功能,且會自動發生。若要停用,使用者應該在他們的 組態 檔案中新增
vim.g.editorconfig = false
(或等效的 Vimscript)。
名為 NVIM_APPNAME 的新環境變數可讓您設定 Nvim 應在其中尋找組態和狀態檔案的目錄。請參閱 :help $NVIM_APPNAME
新增了使用 -l 從 Shell 執行 Lua 指令碼的支援。
nvim -l foo.lua --arg1 --arg2
也適用於 stdin
echo "print(42)" | nvim -l -
為 Lua 新增了一個 omnifunc 實作:vim.lua_omnifunc()
新增了一個新的實驗性 vim.loader,會將 Lua 檔案位元編譯並快取。若要啟用新的載入器,請在您的 init.lua 頂端新增下列內容
vim.loader.enable()
新增 vim.version 用於剖析和比較符合 semver 規格的版本字串。
當在 tmux 3.2 或更新版本中使用 Nvim 時,預設剪貼簿提供者現在會複製到系統剪貼簿。provider-clipboard
'showcmdloc' 選項,可在狀態列或索引標籤列中顯示 'showcmd' 資訊。新的 %S 狀態列項目可用於將 'showcmd' 文字放置在自訂的 'statusline' 中。當 'cmdheight' 設定為 0 時很有用。
'splitkeep' 選項,用於控制水平分割的捲動行為。
'wildoptions' 旗標 "fuzzy" 會在 指令列完成 期間啟用 模糊比對
'diffopt' 現在包含一個 linematch 選項,可對個別區塊啟用第二階段差異,以提供更精確的差異。此選項也適用於 vim.diff()
新增了 --remote-ui 選項,以連線至遠端執行個體,並在本地終端機的 TUI 中顯示。這可用於在背景執行無頭 nvim 執行個體,並根據需要顯示其 UI,這在以前只能使用外部 UI 實作才能實現。
新增了 vim.lsp.codelens.clear() 函式來清除程式碼鏡頭。
為 LSP 用戶端新增了對 willSavewillSaveWaitUntil 功能的支援。willSaveWaitUntil 允許伺服器在儲存文件之前修改文件。語言伺服器的範例使用案例包括移除未使用的匯入或格式化檔案。
為 LSP 用戶端新增了對 workspace/didChangeWatchedFiles 功能的初步支援,以通知伺服器磁碟上的檔案變更。預設會停用此功能,並且可以透過設定 workspace.didChangeWatchedFiles.dynamicRegistration=true 功能來啟用。
vim.diagnostic.is_disabled() 會檢查是否在指定的緩衝區或命名空間中停用了診斷。
現在可以透過指令轉換 Treesitter 擷取。這將允許更複雜的動態語言注入。
vim.treesitter.get_node_text() 現在接受 metadata 選項,以使用 vim.treesitter.query.add_directive() 撰寫自訂指令。
vim.treesitter.language.add() 取代 vim.treesitter.language.require_language
vim.treesitter.foldexpr() 可用於 'foldexpr',以使用 treesitter 進行摺疊。
使用下列項目擴充了 TSNode API
此外,TSNode:range() 現在接受選用的 {include_bytes} 引數。
Treesitter 注入查詢現在使用 https://tree-sitter.github.io/tree-sitter/syntax-highlighting#language-injection 中描述的格式。未來版本中將移除對先前格式的支援。
新增了 nvim_get_hl(),以取得與 nvim_set_hl() 相容的格式的醒目提示群組定義。
vim.filetype.get_option() 可取得特定檔案類型的預設選項值。這是 nvim_get_option_value() 的包裝函式,具有快取功能。
現在一律可使用 require'bit' lua-bit

已變更的功能

下列對現有 API 或功能的變更會新增新的行為。
'exrc' 現在支援 .nvim.lua 檔案。
不再將 'exrc' 標記為已棄用。
已變更 TUI 以在個別程序中執行 (先前使用了個別執行緒)。這不應該是使用者可見的變更,但可能是行為和錯誤細微變更的原因。
先前,可以將 TUI 停用作為建置時間功能 (+tui/-tui),這會導致 nvim 二進位檔案只能以無頭方式執行或嵌入到外部程序中。從此版本開始,TUI 一律可供使用。
現在支援 Vim 的 has('gui_running'),作為外掛程式檢查是否有 GUI (而非 TUI) 附加到 Nvim 的方式。has()
現在一律啟用 msgsep,即使 'display' 未包含 "msgsep" 旗標也是如此。當顯示長度超過 'cmdheight' 的訊息時,無法再捲動整個畫面。
API 呼叫現在會顯示更多關於例外狀況發生位置的資訊。
win_viewport UI 事件現在包含虛擬行的資訊,這表示現在可以更一致地實作平滑捲動。
:= {expr} 語法可用於評估 Lua 運算式,作為 :lua ={expr} 的較短形式。沒有引數的 :=:[range]= 維持不變。但是,不再支援使用 ex-flags:=# 和類似的變體。
channel-stdio 關閉時,未儲存的變更現在會保留而不是捨棄。
nvim_open_win() 現在接受相對的 mouse 選項,以相對於滑鼠開啟浮動視窗。請注意,如果未設定 vim.o.mousemoveevent = true,滑鼠不會頻繁更新。
nvim_eval_statusline() 透過新的 opts 欄位:use_statuscol_lnum 來支援評估 'statuscolumn'
nvim_buf_get_extmarks() 現在接受 -1 ns_id,以從所有命名空間要求 extmark,並將命名空間 ID 新增至詳細資訊陣列。其他遺失的屬性已新增至詳細資訊陣列,並且可以依類型篩選標記。
vim.diagnostic.open_float() (因此 vim.diagnostic.config()) 現在接受 suffix 選項,預設會呈現 LSP 錯誤碼。同樣地,vim.diagnostic.config() 中的 virtual_text 組態現在具有 suffix 選項,預設不會執行任何動作。
vim.fs.dir() 現在具有 opts 引數,其中包含深度欄位,可允許遞迴搜尋目錄樹狀結構。
vim.gsplit() 支援 vim.split() 的所有功能。
:highlight 現在支援額外的屬性 "altfont"。
:Man 手冊檢視器支援包含空格的手冊名稱。
nvim_select_popupmenu_item() 現在支援命令列補全彈出式選單。
nvim_list_uis() 會回報所有 ui-option 欄位。
nvim_get_option_value() 現在有一個 filetype 選項,因此可以針對特定檔案類型回傳預設選項。
建置:進行了多項改進,使程式碼產生腳本更具確定性,並且引入了 LUA_GEN_PRG 建置參數,以便針對一些剩餘的重現性問題提供解決方案。

已移除的功能

以下已棄用的函數或 API 已被移除。
filetype.vim 已被移除,改用 vim.filetype (請注意,檔案類型邏輯和測試仍然與 Vim 對齊,因此新增或變更必須先在那裡貢獻。) 請參閱 https://github.com/neovim/neovim/pull/20674
'hkmap''hkmapp''aleph' 選項已被移除。請改用 'keymap' 選項。
LanguageTree:parse() 不再回傳變更的區域。請改用 on_changedtree 回呼函數。
vim.highlight.create()vim.highlight.link() 已被移除,請改用 nvim_set_hl()
require'health' 已被移除。請改用 vim.health

棄用

請參閱 deprecated-0.9
主要
命令索引
快速參考