新聞

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


自 Nvim 0.10 以來的重要變更
先前版本的變更,請參閱 news-0.10

HEAD 中的重大變更 news-breaking-dev

====== 發布前請移除此區塊。======
以下針對未發布功能在開發週期(Nvim HEAD,即 "master" 分支)期間所做的變更。

選項

'jumpoptions' 旗標 "unload" 已重新命名為 "clean"。

重大變更 news-breaking

這些變更可能需要在您的設定或外掛程式中進行調整。

API

改善 API "meta" 文件字串和 :help 文件。
vim.rpcnotify(0)rpcnotify(0) 會廣播到所有頻道。先前它們只會「多播」到已訂閱的頻道(由 nvim_subscribe() 控制)。想要「多播」行為的外掛程式和客戶端現在必須維護自己的頻道列表。
未來,如果此用例有需求,vim.rpcnotify() 可能會接受頻道列表。
「Dictionary」在內部和 RPC api-metadata 中已重新命名為「Dict」。這預計不會中斷客戶端,因為沒有已知的客戶端實際使用 return_type 欄位或 --api-infonvim_get_api_info() 回報的參數類型名稱。
nvim_open_win() 支援 mouse 欄位,允許與 focusable 欄位分開配置視窗的滑鼠互動。
nvim__id_dictionary (不受支援/實驗性 API) 重新命名為 nvim__id_dict

預設值

]d-default[d-default 接受計數。
[D-default]D-default 分別跳到目前緩衝區中的第一個和最後一個診斷。

診斷

vim.diagnostic.config() 接受 "jump" 表格來指定 vim.diagnostic.jump() 的預設值。
當使用 "severity_sort" 選項時,「underline」診斷處理程式會依嚴重性排序診斷。

編輯器

標記放置的順序已變更。較高優先級的標記現在會出現在較低優先級的標記左側。
hl-CurSearch 現在的行為與 Vim 相同,不再在每次游標移動時更新。
使用 :bnext 和類似命令在緩衝區列表中移動的行為與文件記載一致,如果從非幫助緩衝區執行,則會跳過幫助緩衝區,否則會移動到另一個幫助緩衝區。
來自 終端機 緩衝區的鈴聲現在預設為靜音,除非 'belloff' 選項不包含 "term" 或 "all"。

事件

待辦事項

LSP

改善 LSP 懸停文件的呈現。K-lsp-default
vim.lsp.completion.enable() 獲得了 convert 回調,可自訂將 LSP CompletionItem 轉換為 complete-items
vim.lsp.diagnostic.from() 可用於將 vim.Diagnostic 物件列表轉換為其 LSP 診斷表示法。
vim.lsp.buf.references(), vim.lsp.buf.declaration(), vim.lsp.buf.definition(), vim.lsp.buf.type_definition(), vim.lsp.buf.implementation()vim.lsp.buf.hover() 現在支援合併多個客戶端的結果,但不再觸發來自 vim.lsp.handlers 的全域處理程式
vim.lsp.buf.typehierarchy() 現在會為每個客戶端請求傳遞正確的參數。
vim.lsp.diagnostic.on_publish_diagnostics()vim.lsp.diagnostic.on_diagnostic() 不再接受 config 參數,且無法再使用 vim.lsp.with() 進行配置。請改用
vim.diagnostic.config(config, vim.lsp.diagnostic.get_namespace(client_id))

LUA

API 函式現在一致地傳回一個空字典作為 vim.empty_dict()。先前,有時會使用 lua-special-tbl
以下項目的命令列完成功能:vim.gvim.tvim.wvim.bvim.vvim.ovim.wovim.bovim.optvim.opt_localvim.opt_globalvim.fn

選項

'statuscolumn' %l 項目現在可以用作數字欄區段,會根據相關選項而變更。它會處理對齊、'number''relativenumber''signcolumn' 設定為 "number"。現在多餘的 %r 項目不再針對 'statuscolumn' 進行特殊處理。
:set {option}< 會移除所有 global-local 選項的本機值,而不僅僅是字串 global-local 選項。
:setlocal {option}< 會將全域值複製到數字和布林 global-local 選項的本機值,而不是移除本機值。

外掛程式

待辦事項

TREESITTER

Query:iter_matches() 會正確地傳回比對中的所有相符節點,而不僅僅是最後一個節點。這表示傳回的表格會將擷取 ID 對應到需要逐一查看的節點列表。為了向後相容,提供了一個選項 all=false(僅傳回最後一個比對節點),該選項將在未來的版本中移除。
vim.treesitter.language.get_filetypes() 除了明確註冊的檔案類型之外,始終包含 {language} 引數。
如果未明確註冊任何語言,vim.treesitter.language.get_lang() 會退回到 {filetype} 引數。
如果成功載入剖析器,vim.treesitter.language.add() 會傳回 true,否則會傳回 nil,errmsg,而不是擲回錯誤。
新的 TSNode:child_with_descendant(),與 TSNode:child_containing_descendant() 幾乎相同,差別在於它可以傳回後代本身。

TUI

待辦事項

VIMSCRIPT

v:msgpack_types 已移除 "binary" 類型。msgpackparse() 不再將 BIN、STR 和 FIXSTR 視為不同的類型。如果可能,這些都會以字串形式傳回,如果值包含內嵌的 NUL:s,則會以 blob 形式傳回。

新功能 news-features

新增了以下新功能。

API

nvim__ns_set() 可以設定命名空間的屬性

預設值

醒目提示
改善 :checkhealth 和 :help 緩衝區的樣式。
對應
一般模式中的 grn 對應到 vim.lsp.buf.rename()
一般模式中的 grr 對應到 vim.lsp.buf.references()
一般模式中的 gri 對應到 vim.lsp.buf.implementation()
一般模式中的 gO 對應到 vim.lsp.buf.document_symbol()
一般和視覺模式中的 gra 對應到 vim.lsp.buf.code_action()
插入模式中的 CTRL-S 對應到 vim.lsp.buf.signature_help()
滑鼠 快顯選單 在您右鍵按一下 URL 時包含「在網頁瀏覽器中開啟」項目。
當 LSP 在緩衝區中處於作用中狀態時,滑鼠 快顯選單 會包含「前往定義」項目。
靈感來自 Tim Pope 的 vim-unimpaired 的對應
[q, ]q, [Q, ]Q, [CTRL-Q, ]CTRL-Qquickfix 列表中瀏覽
[l, ]l, [L, ]L, [CTRL-L, ]CTRL-Llocation-list 中瀏覽
[t, ]t, [T, ]T, [CTRL-T, ]CTRL-Ttag-matchlist 中瀏覽
[a, ]a, [A, ]Aargument-list 中瀏覽
[b, ]b, [B, ]Bbuffer-list 中瀏覽
程式碼片段
當程式碼片段處於活動狀態且可向前跳轉時,插入和選取模式中的 <Tab> 會對應到 vim.snippet.jump({ direction = 1 })
當程式碼片段處於活動狀態且可向後跳轉時,插入和選取模式中的 <S-Tab> 會對應到 vim.snippet.jump({ direction = -1 })

編輯器

改善還原 (點重複) 和巨集 (錄製) 的 貼上處理
還原大型貼上操作的速度明顯加快,並會忽略 'autoindent'
使用 @ 重新播放巨集也會重新播放貼上的文字。
在 Windows 上,命令列上以 "~\ " 或 "~/" 為前置詞的檔案名稱引數現在會展開為使用者的設定檔目錄,而不是文字 "~" 目錄的相對路徑。
hl-PmenuMatchhl-PmenuMatchSel 會在完成快顯視窗中顯示相符的文字。

事件

CompleteDone 現在會在 v:event 中設定 reason 鍵,該鍵會指定完成的原因。
vim.on_key() 回調可以透過傳回空字串來使用按鍵。

LSP

完成的副作用(包括程式碼片段展開、命令執行和額外文字編輯的應用)現在是內建的。
vim.lsp.util.locations_to_items() 設定 end_colend_lnum 欄位。
vim.lsp.buf.format() 現在支援透過 range 參數傳遞範圍列表(這需要支援 textDocument/rangesFormatting 請求)。
當有多個客戶端時,vim.lsp.buf.code_action() 動作會顯示客戶端名稱。

LUA

vim.fs.rm() 可以刪除檔案和目錄。
vim.validate() 現在有一個新的簽名,它使用較少的表格,效能更高且更容易閱讀。
vim.str_byteindex()vim.str_utfindex() 增加了重載簽名,支援兩個新參數,encodingstrict_indexing

選項

'completeopt' 標誌 "fuzzy" 在 插入模式補全 期間啟用 模糊比對
'tabclose' 控制關閉分頁時要聚焦哪個分頁。

效能

待辦事項

外掛程式

EditorConfig
現在支援 spelling_language 屬性。

啟動

如果 --listen$NVIM_LISTEN_ADDRESS 位址無效,Nvim 將會失敗,而不是靜默地跳過無效位址。

終端

終端 現在理解 OSC 52 逸出序列,可以寫入系統剪貼簿(複製)。不支援使用 OSC 52 查詢(貼上)。
hl-StatusLineTermhl-StatusLineTermNC 定義 終端 視窗中狀態列的醒目提示。
終端緩衝區現在支援重排(當緩衝區水平調整大小時,換行會隨之調整)。注意:不可見並保留在 'scrollback' 中的行不會重排。
終端 現在支援 OSC 8 逸出序列,並將在支援的主機終端中顯示超連結。

TREESITTER

LanguageTree:node_for_range() 取得範圍內的匿名和具名節點。
vim.treesitter.get_node() 現在接受一個選項 include_anonymous,預設為 false,允許它返回匿名節點以及具名節點。

TUI

內建 UI 在其通道上宣告 info nvim_set_client_info()。請參閱 startup-tui。若要查看目前的 UI 資訊,請嘗試以下操作
:lua =vim.api.nvim_get_chan_info(vim.api.nvim_list_uis()[1].chan)
由內建 UI 客戶端 (TUI、--remote-ui) 寫入的 log 訊息現在以 "ui" 而不是 "?" 作為前綴。

UI

vim.ui.open() (預設綁定到 gx) 接受一個 opt.cmd 參數,該參數控制用於開啟給定路徑或 URL 的工具。如果您想全域設定此參數,可以使用與 vim.paste() 相同的方法覆寫 vim.ui.open。
vim.ui.open() 現在支援 [lemonade](https://github.com/lemonade-command/lemonade) 作為開啟網址/檔案的選項。如果您處於 ssh 連線並使用 lemonade,這將很方便。
插入模式補全選單 現在支援級聯醒目提示樣式。hl-PmenuSelhl-PmenuMatch 都繼承自 hl-Pmenu,而 hl-PmenuMatchSel 繼承自 hl-PmenuSelhl-PmenuMatch 的醒目提示。

變更的功能 news-changed

這些現有功能變更了其行為。
'scrollbind' 現在可以正確處理包含虛擬行的緩衝區。
Scrollbind 的運作方式是與分頁中每個視窗的目標頂行對齊。先前,這是透過計算舊頂行和目標頂行之間的差異,並按該量滾動來完成的。現在,頂行的計算使用螢幕行號,該螢幕行號會將虛擬行納入考量。
字素叢集(或組合字元 mbyte-combining)的實作已升級,以密切遵循 Unicode 標準中 UAX#29 定義的擴展字素叢集。值得注意的是,這可以正確顯示比以前更多的表情符號字元,包括那些使用多個表情符號程式碼點與 ZWJ(零寬度連接符)程式碼點組合編碼的表情符號字元。
'statusline''tabline''winbar' 中的文字現在會從各自的 hl-StatusLinehl-TabLinehl-WinBar 醒目提示群組繼承醒目提示。
當回呼本身消耗輸入時,不會遞迴叫用 vim.on_key() 回呼。
man 頁面中的 "q" 現在使用 CTRL-W_q 而不是 CTRL-W_c 來關閉目前的視窗,並且當螢幕上只有一個視窗時,不再拋出 E444。全域變數 vim.g.pager 已移除。

已移除的功能 news-removed

這些已棄用的功能已移除。
不適用
請參閱 deprecated-0.11
主要
指令索引
快速參考