診斷

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


診斷框架
Nvim 提供一個框架,用於顯示來自外部工具的錯誤或警告,也稱為「診斷」。這些診斷可能來自各種來源,例如程式碼檢查器或 LSP 伺服器。診斷框架是對現有錯誤處理功能的擴展,例如 quickfix 列表。
任何報告診斷的內容在下面都被稱為「診斷產生器」。診斷產生器只需要遵循幾個簡單的步驟來報告診斷
1. 建立一個命名空間 nvim_create_namespace()。請注意,命名空間必須有一個名稱。匿名命名空間將無法運作。 2. (可選) 配置診斷命名空間的選項 vim.diagnostic.config()。 3. 產生診斷。 4. 設定緩衝區的診斷 vim.diagnostic.set()。 5. 從步驟 3 重複。
一般來說,API 分為兩類:一類是供診斷產生器使用的函數,另一類是供診斷消費者(即想要讀取和查看緩衝區診斷的最終使用者)使用的函數。產生器的 API 需要一個 {namespace} 作為它們的第一個參數,而消費者的 API 通常不需要命名空間(儘管通常可以選擇提供一個)。一個好的經驗法則是,如果一個方法旨在修改緩衝區的診斷(例如 vim.diagnostic.set()),則它需要一個命名空間。
vim.diagnostic.severity diagnostic-severity 診斷中的「嚴重性」鍵是 vim.diagnostic.severity 中定義的值之一
vim.diagnostic.severity.ERROR vim.diagnostic.severity.WARN vim.diagnostic.severity.INFO vim.diagnostic.severity.HINT
將嚴重性作為可選參數的函數(例如 vim.diagnostic.get())接受以下三種形式之一
1. 單個 vim.diagnostic.severity
vim.diagnostic.get(0, { severity = vim.diagnostic.severity.WARN })
2. 帶有 "min" 或 "max" 鍵(或兩者都有)的表格
vim.diagnostic.get(0, { severity = { min = vim.diagnostic.severity.WARN } })
這種形式允許使用者指定嚴重性範圍。
3. 類似列表的表格
vim.diagnostic.get(0, { severity = {
    vim.diagnostic.severity.WARN,
    vim.diagnostic.severity.INFO,
} })
這種形式允許使用者篩選特定嚴重性
診斷透過 vim.diagnostic.show() 顯示給使用者。診斷的顯示透過處理器管理。處理器是一個表格,其中包含 "show" 和(可選的)"hide" 函數。"show" 函數具有以下簽名
function(namespace, bufnr, diagnostics, opts)
並負責顯示或以其他方式處理給定的診斷。"hide" 函數負責「清理」"show" 函數採取的任何動作,並具有以下簽名
function(namespace, bufnr)
處理器可以使用 vim.diagnostic.config() 進行配置,並透過在 vim.diagnostic.handlers 中建立新的鍵來新增(請參閱 diagnostic-handlers-example)。
傳遞給處理器的 {opts} 表格是完整的配置選項集(也就是說,它不僅限於處理器本身的選項)。表格中的值已經解析(即,如果使用者為配置選項指定一個函數,則該函數已經被評估)。
Nvim 預設提供這些處理器:"virtual_text"、"signs" 和 "underline"。
diagnostic-handlers-example
下面的範例建立一個新的處理器,使用 vim.notify() 通知使用者診斷。
-- It's good practice to namespace custom handlers to avoid collisions
vim.diagnostic.handlers["my/notify"] = {
  show = function(namespace, bufnr, diagnostics, opts)
    -- In our example, the opts table has a "log_level" option
    local level = opts["my/notify"].log_level
    local name = vim.diagnostic.get_namespace(namespace).name
    local msg = string.format("%d diagnostics in buffer %d from %s",
                              #diagnostics,
                              bufnr,
                              name)
    vim.notify(msg, level)
  end,
}
-- Users can configure the handler
vim.diagnostic.config({
  ["my/notify"] = {
    log_level = vim.log.levels.INFO
  }
})
在此範例中,當診斷被隱藏時,沒有任何事情需要做,因此我們省略了 "hide" 函數。
現有的處理器可以被覆蓋。例如,使用以下內容僅顯示給定行上嚴重性最高的診斷的標記
-- Create a custom namespace. This will aggregate signs from all other
-- namespaces and only show the one with the highest severity on a
-- given line
local ns = vim.api.nvim_create_namespace("my_namespace")
-- Get a reference to the original signs handler
local orig_signs_handler = vim.diagnostic.handlers.signs
-- Override the built-in signs handler
vim.diagnostic.handlers.signs = {
  show = function(_, bufnr, _, opts)
    -- Get all diagnostics from the whole buffer rather than just the
    -- diagnostics passed to the handler
    local diagnostics = vim.diagnostic.get(bufnr)
    -- Find the "worst" diagnostic per line
    local max_severity_per_line = {}
    for _, d in pairs(diagnostics) do
      local m = max_severity_per_line[d.lnum]
      if not m or d.severity < m.severity then
        max_severity_per_line[d.lnum] = d
      end
    end
    -- Pass the filtered diagnostics (with our custom namespace) to
    -- the original handler
    local filtered_diagnostics = vim.tbl_values(max_severity_per_line)
    orig_signs_handler.show(ns, bufnr, filtered_diagnostics, opts)
  end,
  hide = function(_, bufnr)
    orig_signs_handler.hide(ns, bufnr)
  end,
}
為診斷定義的所有醒目顯示都以 Diagnostic 開頭,後跟醒目顯示的類型(例如,SignUnderline 等)和嚴重性(例如,ErrorWarn 等)。
預設情況下,標記、浮動視窗和虛擬文字的醒目顯示會連結到相應的預設醒目顯示。底線醒目顯示不會連結,並且使用它們自己的預設醒目顯示群組。
例如,hl-DiagnosticSignError 的預設醒目顯示會連結到 hl-DiagnosticError。若要變更預設值(因此會變更連結的醒目顯示),請使用 :highlight 命令
highlight DiagnosticError guifg="BrightRed"
hl-DiagnosticError
DiagnosticError 用作基本醒目顯示群組。其他診斷醒目顯示預設會連結到此(底線除外)
hl-DiagnosticWarn
DiagnosticWarn 用作基本醒目顯示群組。其他診斷醒目顯示預設會連結到此(底線除外)
hl-DiagnosticInfo
DiagnosticInfo 用作基本醒目顯示群組。其他診斷醒目顯示預設會連結到此(底線除外)
hl-DiagnosticHint
DiagnosticHint 用作基本醒目顯示群組。其他診斷醒目顯示預設會連結到此(底線除外)
hl-DiagnosticOk
DiagnosticOk 用作基本醒目顯示群組。其他診斷醒目顯示預設會連結到此(底線除外)
hl-DiagnosticVirtualTextError
DiagnosticVirtualTextError 用於「錯誤」診斷虛擬文字。
hl-DiagnosticVirtualTextWarn
DiagnosticVirtualTextWarn 用於「警告」診斷虛擬文字。
hl-DiagnosticVirtualTextInfo
DiagnosticVirtualTextInfo 用於「資訊」診斷虛擬文字。
hl-DiagnosticVirtualTextHint
DiagnosticVirtualTextHint 用於「提示」診斷虛擬文字。
hl-DiagnosticVirtualTextOk
DiagnosticVirtualTextOk 用於「確定」診斷虛擬文字。
hl-DiagnosticUnderlineError
DiagnosticUnderlineError 用於底線標示「錯誤」診斷。
hl-DiagnosticUnderlineWarn
DiagnosticUnderlineWarn 用於底線標示「警告」診斷。
hl-DiagnosticUnderlineInfo
DiagnosticUnderlineInfo 用於底線標示「資訊」診斷。
hl-DiagnosticUnderlineHint
DiagnosticUnderlineHint 用於底線標示「提示」診斷。
hl-DiagnosticUnderlineOk
DiagnosticUnderlineOk 用於底線標示「確定」診斷。
hl-DiagnosticFloatingError
DiagnosticFloatingError 用於在診斷浮動視窗中為「錯誤」診斷訊息著色。請參閱 vim.diagnostic.open_float()
hl-DiagnosticFloatingWarn
DiagnosticFloatingWarn 用於在診斷浮動視窗中為「警告」診斷訊息著色。
hl-DiagnosticFloatingInfo
DiagnosticFloatingInfo 用於在診斷浮動視窗中為「資訊」診斷訊息著色。
hl-DiagnosticFloatingHint
DiagnosticFloatingHint 用於在診斷浮動視窗中為「提示」診斷訊息著色。
hl-DiagnosticFloatingOk
DiagnosticFloatingOk 用於在診斷浮動視窗中為「確定」診斷訊息著色。
hl-DiagnosticSignError
DiagnosticSignError 用於標記欄中的「錯誤」標記。
hl-DiagnosticSignWarn
DiagnosticSignWarn 用於標記欄中的「警告」標記。
hl-DiagnosticSignInfo
DiagnosticSignInfo 用於標記欄中的「資訊」標記。
hl-DiagnosticSignHint
DiagnosticSignHint 用於標記欄中的「提示」標記。
hl-DiagnosticSignOk
DiagnosticSignOk 用於標記欄中的「確定」標記。
hl-DiagnosticDeprecated
DiagnosticDeprecated 用於已棄用或過時的程式碼。
hl-DiagnosticUnnecessary
DiagnosticUnnecessary 用於不必要或未使用的程式碼。
為每個診斷嚴重性定義標記。每個標記的預設文字是嚴重性名稱的第一個字母(例如,「E」表示 ERROR)。標記可以使用 vim.diagnostic.config() 進行自訂。範例
-- Highlight entire line for errors
-- Highlight the line number for warnings
vim.diagnostic.config({
    signs = {
        text = {
            [vim.diagnostic.severity.ERROR] = '',
            [vim.diagnostic.severity.WARN] = '',
        },
        linehl = {
            [vim.diagnostic.severity.ERROR] = 'ErrorMsg',
        },
        numhl = {
            [vim.diagnostic.severity.WARN] = 'WarningMsg',
        },
    },
})
當設定 "severity_sort" 選項時(請參閱 vim.diagnostic.config()),每個標記的優先順序取決於相關診斷的嚴重性。否則,所有標記都具有相同的優先順序(vim.diagnostic.config() 的 "signs" 表格中 "priority" 選項的值,如果未設定則為 10)。
DiagnosticChanged
DiagnosticChanged 在診斷變更之後。從 Lua 使用時,新的診斷會以 "data" 表格傳遞給自動指令回呼。
範例
vim.api.nvim_create_autocmd('DiagnosticChanged', {
  callback = function(args)
    local diagnostics = args.data.diagnostics
    vim.print(diagnostics)
  end,
})

Lua 模組:vim.diagnostic diagnostic-api

診斷使用與 Nvim API 其餘部分相同的索引(即,以 0 為基礎的行和列)。api-indexing
欄位
{bufnr} (integer) 緩衝區編號
{lnum} (integer) 診斷的起始行 (以 0 為索引)
{end_lnum} (integer) 診斷的結束行 (以 0 為索引)
{col} (integer) 診斷的起始列 (以 0 為索引)
{end_col} (integer) 診斷的結束列 (以 0 為索引)
{severity} (vim.diagnostic.Severity) 診斷的嚴重性 vim.diagnostic.severity
{message} (string) 診斷文字
{source} (string) 診斷來源
{code} (string|integer) 診斷程式碼
{user_data} (any) 插件可以新增的任意資料
{namespace} (integer)
vim.diagnostic.GetOpts 具有以下鍵的表格
欄位
{namespace} (integer[]|integer) 將診斷限制為一個或多個命名空間。
{lnum} (integer) 將診斷限制為跨越指定行號的診斷。
{severity} (vim.diagnostic.SeverityFilter) 請參閱 diagnostic-severity
具有以下列出的鍵的設定表格。某些參數的預設值可以使用 vim.diagnostic.config() 變更。
欄位
{diagnostic} (vim.Diagnostic) 要跳轉到的診斷。與 {count}{namespace}{severity} 互斥。請參閱 vim.Diagnostic
{count} (integer) 要從 {pos} 開始移動的診斷數量。正整數表示向前移動 {count} 個診斷,而負整數表示向後移動 {count} 個診斷。與 {diagnostic} 互斥。
{pos} ([integer,integer]) 作為 (row, col) 元組的游標位置。請參閱 nvim_win_get_cursor()。當使用 {count} 時,用於尋找最近的診斷。僅當 {count} 為非空值時才使用。預設值為目前的游標位置。
{wrap} (boolean, 預設值:true) 是否在檔案周圍迴圈。類似於 'wrapscan'
{severity} (vim.diagnostic.SeverityFilter) 請參閱 diagnostic-severity
{float} (boolean|vim.diagnostic.Opts.Float, 預設值:false) 如果為 true,則在移動後呼叫 vim.diagnostic.open_float()。如果是表格,則將該表格作為 {opts} 參數傳遞給 vim.diagnostic.open_float()。除非覆寫,否則浮動視窗將顯示新游標位置的診斷(就像 "cursor" 被傳遞到 "scope" 選項一樣)。
{winid} (integer,預設值:0) 視窗 ID
欄位
{name} (string)
{opts} (vim.diagnostic.Opts) 請參閱 vim.diagnostic.Opts
{user_data} (table)
{disabled} (boolean)
vim.diagnostic.Opts 以下許多配置選項接受下列其中一個值:
false:停用此功能
true:啟用此功能,使用預設設定。
table:啟用此功能並覆寫設定。使用空表格以使用預設值。
function:具有簽名 (namespace, bufnr) 的函數,會傳回以上任何一個值。
欄位
{underline} (boolean|vim.diagnostic.Opts.Underline|fun(namespace: integer, bufnr:integer): vim.diagnostic.Opts.Underline,預設值:true) 對診斷訊息使用底線。
{virtual_text} (boolean|vim.diagnostic.Opts.VirtualText|fun(namespace: integer, bufnr:integer): vim.diagnostic.Opts.VirtualText,預設值:true) 對診斷訊息使用虛擬文字。如果為一個命名空間設定了多個診斷訊息,則會顯示每個診斷訊息的前綴加上最後一個診斷訊息。
{signs} (boolean|vim.diagnostic.Opts.Signs|fun(namespace: integer, bufnr:integer): vim.diagnostic.Opts.Signs,預設值:true) 對診斷訊息使用標記 diagnostic-signs
{float} (boolean|vim.diagnostic.Opts.Float|fun(namespace: integer, bufnr:integer): vim.diagnostic.Opts.Float) 浮動視窗的選項。請參閱 vim.diagnostic.Opts.Float
{update_in_insert} (boolean,預設值:false) 在插入模式中更新診斷訊息(如果為 false,則診斷訊息會在 InsertLeave 時更新)
{severity_sort} (boolean|{reverse?:boolean},預設值:false) 依嚴重程度排序診斷訊息。這會影響標記、虛擬文字和高亮顯示的顯示順序。如果為 true,則會先顯示較高嚴重程度的訊息,然後再顯示較低嚴重程度的訊息(例如,ERROR 會顯示在 WARN 之前)。選項
{reverse} (boolean) 反向排序順序
{jump} (vim.diagnostic.Opts.Jump) vim.diagnostic.jump() 的預設值。請參閱 vim.diagnostic.Opts.Jump
欄位
{bufnr} (integer,預設值:目前緩衝區) 要顯示診斷訊息的緩衝區編號。
{namespace} (integer) 將診斷訊息限制於指定的命名空間
{scope} ('line'|'buffer'|'cursor'|'c'|'l'|'b',預設值:line) 顯示整個緩衝區 (buffer)、目前游標行 (line) 或目前游標位置 (cursor) 的診斷訊息。也接受縮寫版本 (c 代表 cursorl 代表 lineb 代表 buffer)。
{pos} (integer|[integer,integer]) 如果 {scope} 為 "line" 或 "cursor",則使用此位置而非游標位置。如果為數字,則會被解讀為行號;否則,則為 (行, 列) 的元組。
{severity_sort} (boolean|{reverse?:boolean},預設值:false) 依嚴重程度排序診斷訊息。覆寫 vim.diagnostic.config() 的設定。
{severity} (vim.diagnostic.SeverityFilter) 請參閱 diagnostic-severity。覆寫 vim.diagnostic.config() 的設定。
{header} (string|[string,any]) 用於浮動視窗標題的字串。如果為表格,則會被解讀為 [text, hl_group] 的元組。覆寫 vim.diagnostic.config() 的設定。
{source} (boolean|'if_many') 在訊息中包含診斷來源。如果緩衝區中有多個診斷來源,則使用 "if_many" 僅顯示來源。否則,任何真值都表示一律顯示診斷來源。覆寫 vim.diagnostic.config() 的設定。
{format} (fun(diagnostic:vim.Diagnostic): string) 一個接受診斷訊息作為輸入並傳回字串的函數。傳回值是顯示診斷訊息時使用的文字。覆寫 vim.diagnostic.config() 的設定。
{prefix} (string|table|(fun(diagnostic:vim.Diagnostic,i:integer,total:integer): string, string)) 在浮動視窗中為每個診斷訊息加上前綴
如果為 function{i} 是正在評估的診斷訊息索引,而 {total} 是視窗中顯示的診斷訊息總數。該函數應該傳回一個 string,該 string 會被加在視窗中的每個診斷訊息前面,以及一個 (可選的) 高亮顯示群組,該群組將用於高亮顯示前綴。
如果為 table,則會像 nvim_echo() 一樣被解讀為 [text, hl_group] 元組
如果為 string,則會將其加在視窗中的每個診斷訊息前面,且不進行高亮顯示。覆寫 vim.diagnostic.config() 的設定。
{suffix} (string|table|(fun(diagnostic:vim.Diagnostic,i:integer,total:integer): string, string)) 與 {prefix} 相同,但將文字附加到診斷訊息,而不是加在其前面。覆寫 vim.diagnostic.config() 的設定。
{focus_id} (string)
{border} (string) 請參閱 nvim_open_win()
欄位
{float} (boolean|vim.diagnostic.Opts.Float,預設值:false) vim.diagnostic.jump(){float} 參數的預設值。
{wrap} (boolean,預設值:true) vim.diagnostic.jump(){wrap} 參數的預設值。
{severity} (vim.diagnostic.SeverityFilter) vim.diagnostic.jump(){severity} 參數的預設值。
欄位
{severity} (vim.diagnostic.SeverityFilter) 僅顯示符合指定嚴重程度的診斷訊息的虛擬文字 diagnostic-severity
{priority} (integer,預設值:10) 用於標記的基本優先順序。使用 {severity_sort} 時,標記的優先順序會根據其嚴重程度進行調整。否則,所有標記都使用相同的優先順序。
{text} (table<vim.diagnostic.Severity,string>) 一個將 diagnostic-severity 對應到標記欄中顯示的標記文字的表格。預設值是分別對錯誤、警告、資訊和提示使用 "E""W""I""H"。範例
vim.diagnostic.config({
  signs = { text = { [vim.diagnostic.severity.ERROR] = 'E', ... } }
})
{numhl} (table<vim.diagnostic.Severity,string>) 一個將 diagnostic-severity 對應到用於放置標記的行號的高亮顯示群組的表格。
{linehl} (table<vim.diagnostic.Severity,string>) 一個將 diagnostic-severity 對應到用於標記所在整行的高亮顯示群組的表格。
欄位
{severity} (vim.diagnostic.SeverityFilter) 僅對符合指定嚴重程度的診斷訊息加上底線 diagnostic-severity
欄位
{severity} (vim.diagnostic.SeverityFilter) 僅顯示符合指定嚴重程度的診斷訊息的虛擬文字 diagnostic-severity
{source} (boolean|"if_many") 在虛擬文字中包含診斷來源。如果緩衝區中有多個診斷來源,則使用 'if_many' 僅顯示來源。否則,任何真值都表示一律顯示診斷來源。
{spacing} (integer) 在虛擬文字開頭插入的空白字元數。
{prefix} (string|(fun(diagnostic:vim.Diagnostic,i:integer,total:integer): string)) 在診斷訊息前加上前綴。如果為 function{i} 是正在評估的診斷訊息索引,而 {total} 是該行的診斷訊息總數。這可用於呈現診斷符號或錯誤代碼。
{suffix} (string|(fun(diagnostic:vim.Diagnostic): string)) 在診斷訊息後加上後綴。這可用於呈現 LSP 診斷錯誤代碼。
{format} (fun(diagnostic:vim.Diagnostic): string) 傳回值是顯示診斷訊息時使用的文字。範例
function(diagnostic)
  if diagnostic.severity == vim.diagnostic.severity.ERROR then
    return string.format("E: %s", diagnostic.message)
  end
  return diagnostic.message
end
{hl_mode} ('replace'|'combine'|'blend') 請參閱 nvim_buf_set_extmark()
{virt_text} ([string,any][]) 請參閱 nvim_buf_set_extmark()
{virt_text_pos} ('eol'|'overlay'|'right_align'|'inline') 請參閱 nvim_buf_set_extmark()
{virt_text_win_col} (integer) 請參閱 nvim_buf_set_extmark()
{virt_text_hide} (boolean) 請參閱 nvim_buf_set_extmark()
config({opts}, {namespace}) vim.diagnostic.config()
全域或針對特定診斷命名空間配置診斷選項。
可以全域指定配置、依命名空間指定配置或臨時指定配置(即僅針對單次呼叫 vim.diagnostic.set()vim.diagnostic.show())。臨時配置的優先順序最高,其次是命名空間配置,最後是全域配置。
例如,如果使用者使用以下方式全域啟用虛擬文字:
vim.diagnostic.config({ virtual_text = true })
且診斷訊息產生器使用以下方式設定診斷訊息:
vim.diagnostic.set(ns, 0, diagnostics, { virtual_text = false })
則不會為這些診斷訊息啟用虛擬文字。
參數
{opts} (vim.diagnostic.Opts?) 如果省略或為 nil,則檢索目前配置。否則,是一個配置表格(請參閱 vim.diagnostic.Opts)。
{namespace} (integer?) 更新指定命名空間的選項。如果省略,則更新全域診斷選項。
傳回
(vim.diagnostic.Opts?) 如果省略 {opts},則為目前診斷訊息配置。請參閱 vim.diagnostic.Opts
count({bufnr}, {opts}) vim.diagnostic.count()
取得目前診斷訊息計數。
參數
{bufnr} (integer?) 要從中取得診斷訊息的緩衝區編號。針對目前緩衝區使用 0,或針對所有緩衝區使用 nil。
{opts} (vim.diagnostic.GetOpts?) 請參閱 vim.diagnostic.GetOpts
傳回
(table) 以實際存在的嚴重程度值作為索引鍵(請參閱 diagnostic-severity)以及整數計數作為值的表格。
enable({enable}, {filter}) vim.diagnostic.enable()
啟用或停用診斷訊息。
若要「切換」,請傳遞 is_enabled() 的反值
vim.diagnostic.enable(not vim.diagnostic.is_enabled())
參數
{enable} (boolean?) true/nil 啟用,false 停用
{filter} (table?) 選用的篩選器 kwargs,或 nil 表示全部。
{ns_id} (integer) 診斷命名空間,或 nil 表示全部。
{bufnr} (integer) 緩衝區編號,或 0 表示目前緩衝區,或 nil 表示全部緩衝區。
fromqflist({list}) vim.diagnostic.fromqflist()
將快速修復項目列表轉換為診斷列表。
參數
{list} (table[]) 來自 getqflist()getloclist() 的快速修復項目列表。
傳回
(vim.Diagnostic[]) 請參閱 vim.Diagnostic
get({bufnr}, {opts}) vim.diagnostic.get()
取得目前的診斷。
修改回傳表格中的診斷無效。若要在緩衝區中設定診斷,請使用 vim.diagnostic.set()
參數
{bufnr} (integer?) 要從中取得診斷訊息的緩衝區編號。針對目前緩衝區使用 0,或針對所有緩衝區使用 nil。
{opts} (vim.diagnostic.GetOpts?) 請參閱 vim.diagnostic.GetOpts
傳回
(vim.Diagnostic[]) 欄位 bufnrend_lnumend_colseverity 保證存在。請參閱 vim.Diagnostic
get_namespace({namespace}) vim.diagnostic.get_namespace()
取得命名空間的元數據。
參數
{namespace} (integer) 診斷命名空間
傳回
(vim.diagnostic.NS) 命名空間元數據。請參閱 vim.diagnostic.NS
get_namespaces() vim.diagnostic.get_namespaces()
取得目前的診斷命名空間。
傳回
(table<integer,vim.diagnostic.NS>) 活動診斷命名空間列表 vim.diagnostic
get_next({opts}) vim.diagnostic.get_next()
取得最接近游標位置的下一個診斷。
參數
{opts} (vim.diagnostic.JumpOpts?) 請參閱 vim.diagnostic.JumpOpts
傳回
(vim.Diagnostic?) 下一個診斷。請參閱 vim.Diagnostic
get_prev({opts}) vim.diagnostic.get_prev()
取得最接近游標位置的上一個診斷。
參數
{opts} (vim.diagnostic.JumpOpts?) 請參閱 vim.diagnostic.JumpOpts
傳回
(vim.Diagnostic?) 上一個診斷。請參閱 vim.Diagnostic
hide({namespace}, {bufnr}) vim.diagnostic.hide()
隱藏目前顯示的診斷。
這只會清除緩衝區中顯示的裝飾。可以使用 vim.diagnostic.show() 重新顯示診斷。若要完全移除診斷,請使用 vim.diagnostic.reset()
若要隱藏診斷並防止它們重新顯示,請使用 vim.diagnostic.enable()
參數
{namespace} (integer?) 診斷命名空間。省略時,隱藏所有命名空間的診斷。
{bufnr} (integer?) 緩衝區編號,或 0 表示目前緩衝區。省略時,隱藏所有緩衝區的診斷。
is_enabled({filter}) vim.diagnostic.is_enabled()
檢查是否已啟用診斷。
屬性
自:0.10.0 起
參數
{filter} (table?) 選用的篩選器 kwargs,或 nil 表示全部。
{ns_id} (integer) 診斷命名空間,或 nil 表示全部。
{bufnr} (integer) 緩衝區編號,或 0 表示目前緩衝區,或 nil 表示全部緩衝區。
傳回
(boolean)
jump({opts}) vim.diagnostic.jump()
移動到診斷。
參數
{opts} (vim.diagnostic.JumpOpts) 請參閱 vim.diagnostic.JumpOpts
傳回
(vim.Diagnostic?) 移動到的診斷。請參閱 vim.Diagnostic
vim.diagnostic.match()
match({str}, {pat}, {groups}, {severity_map}, {defaults}) 從字串剖析診斷。
例如,考慮來自 linter 的一行輸出
WARNING filename:27:3: Variable 'foo' does not exist
可以使用以下方式將其剖析為 vim.Diagnostic 結構
local s = "WARNING filename:27:3: Variable 'foo' does not exist"
local pattern = "^(%w+) %w+:(%d+):(%d+): (.+)$"
local groups = { "severity", "lnum", "col", "message" }
vim.diagnostic.match(s, pattern, groups, { WARNING = vim.diagnostic.WARN })
參數
{str} (string) 用於剖析診斷的字串。
{pat} (string) 具有捕獲組的 Lua 模式。
{groups} (string[]) vim.Diagnostic 結構中的欄位列表,與 {pat} 的捕獲相關聯。
{severity_map} (table) 一個表格,將 {groups} 中的 severity 欄位與 vim.diagnostic.severity 中的項目對應。
{defaults} (table?) 未列在 {groups} 中的任何欄位的預設值表格。省略時,數值預設為 0,而 "severity" 預設為 ERROR。
傳回
(vim.Diagnostic?) vim.Diagnostic 結構,如果 {pat} 無法比對 {str},則為 nil
open_float({opts}) vim.diagnostic.open_float()
在浮動視窗中顯示診斷。
參數
{opts} (vim.diagnostic.Opts.Float?) 請參閱 vim.diagnostic.Opts.Float
回傳(多個)
(integer?) float_bufnr (integer?) winid
reset({namespace}, {bufnr}) vim.diagnostic.reset()
從給定的命名空間中移除所有診斷。
vim.diagnostic.hide() 不同,此函式會移除所有已儲存的診斷。無法使用 vim.diagnostic.show() 重新顯示它們。若要簡單地移除診斷裝飾,使其可以重新顯示,請使用 vim.diagnostic.hide()
參數
{namespace} (integer?) 診斷命名空間。省略時,從所有命名空間移除診斷。
{bufnr} (integer?) 移除給定緩衝區的診斷。省略時,將移除所有緩衝區的診斷。
set({namespace}, {bufnr}, {diagnostics}, {opts}) vim.diagnostic.set() 設定給定命名空間和緩衝區的診斷。
參數
{namespace} (integer) 診斷命名空間
{bufnr} (integer) 緩衝區編號
{diagnostics} (vim.Diagnostic[]) 請參閱 vim.Diagnostic
{opts} (vim.diagnostic.Opts?) 要傳遞給 vim.diagnostic.show() 的顯示選項。請參閱 vim.diagnostic.Opts
setloclist({opts}) vim.diagnostic.setloclist()
將緩衝區診斷新增至位置列表。
參數
{opts} (table?) 具有以下鍵的組態表
{namespace} (integer) 只新增來自給定命名空間的診斷。
{winnr} (integer,預設值:0) 要設定位置列表的視窗編號。
{open} (boolean,預設值:true) 設定後開啟位置列表。
{title} (string) 位置列表的標題。預設為 "Diagnostics"。
{severity} (vim.diagnostic.SeverityFilter) 請參閱 diagnostic-severity
setqflist({opts}) vim.diagnostic.setqflist()
將所有診斷新增至快速修復列表。
參數
{opts} (table?) 具有以下鍵的組態表
{namespace} (integer) 只新增來自給定命名空間的診斷。
{open} (boolean,預設值:true) 設定後開啟快速修復列表。
{title} (string) 快速修復列表的標題。預設為 "Diagnostics"。
{severity} (vim.diagnostic.SeverityFilter) 請參閱 diagnostic-severity
vim.diagnostic.show()
show({namespace}, {bufnr}, {diagnostics}, {opts}) 顯示給定命名空間和緩衝區的診斷。
參數
{namespace} (integer?) 診斷命名空間。省略時,顯示所有命名空間的診斷。
{bufnr} (integer?) 緩衝區編號,或 0 表示目前緩衝區。省略時,顯示所有緩衝區的診斷。
{diagnostics} (vim.Diagnostic[]?) 要顯示的診斷。省略時,使用給定命名空間和緩衝區的已儲存診斷。這可用於顯示診斷列表而不儲存它們,或僅顯示診斷的子集。當 {namespace}{bufnr} 為 nil 時,可能無法使用。請參閱 vim.Diagnostic
{opts} (vim.diagnostic.Opts?) 顯示選項。請參閱 vim.diagnostic.Opts
toqflist({diagnostics}) vim.diagnostic.toqflist()
將診斷列表轉換為可以傳遞給 setqflist()setloclist() 的快速修復項目列表。
參數
{diagnostics} (vim.Diagnostic[]) 請參閱 vim.Diagnostic
傳回
(table[]) 快速修復列表項目 setqflist-what
主要
指令索引
快速參考