诊断

Nvim :help 页面,生成源代码使用tree-sitter-vimdoc 解析器。


诊断框架
Nvim 提供了一个框架,用于显示来自外部工具的错误或警告,也称为“诊断”。这些诊断可以来自多种来源,例如 linter 或 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,
} })
此形式允许用户筛选特定严重性。

处理程序 diagnostic-handlers

诊断使用 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 用于不必要或未使用的代码。
为每个诊断严重性定义标记。每个标记的默认文本是严重性名称的首字母(例如,ERROR 的“E”)。标记可以使用 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”表中传递给 autocmd 回调。
示例
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,该字符串将被添加到窗口中的每个诊断信息之前,以及一个(可选的)高亮组,该高亮组将用于突出显示前缀。
如果为 table,则解释为 [text, hl_group] 元组,如 nvim_echo() 中所示。
如果为 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} 中的严重性字段映射到 vim.diagnostic.severity 中的项目。
{defaults} (table?) 未列在 {groups} 中的任何字段的默认值表。省略时,数字值默认为 0,"severity" 默认为 ERROR。
返回
(vim.Diagnostic?) vim.Diagnostic 结构或 nil,如果 {pat} 无法匹配 {str}
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
命令索引
快速参考