Vim 错误格式和光谱 lint

Vim errorformat and spectral lint

我正在尝试为 Spectral OpenAPI linter (https://github.com/stoplightio/spectral) 定义错误格式。我的代码在下面,但我看到的是在我 运行 :make quickfix window 填充了来自 Spectral 的行之后,但我无法导航到错误点使用它。 Vim 中没有错误,快速修复 window 只是没什么作用。

来自 Spectral 的消息如下所示:

/path/to/sample.yaml:25:9 error oas3-schema "Property `think` is not expected to be here."

我当前的 Vim 脚本如下所示:

function! OpenAPIDetect()
    if getline(1) =~ 'openapi:'
        let &l:makeprg='spectral lint "' .  expand('%') . '" -f text'
        setlocal errorformat=%f:%l:%c\ (information\|warning\|error)\ (\w\|-)\+\ %m
        setlocal errorformat+=%-GOpenAPI\ 3.x\ detected
    endif
endfunction

augroup filetypedetect
    au BufRead,BufNewFile *.{yml,yaml} call OpenAPIDetect()
augroup END

以下应该足够了:

setlocal errorformat=%f:%l:%c\ %t%.%\{-}\ %m
  • %f:%l:%c 匹配以冒号分隔的文件名、行和列,
  • %t 匹配单个字符,用于推断错误类型(error if e, warning if w, info 如果 i, hint 不支持),
  • %.%\{-} 跳过 "type" 单词的其余部分,
  • %m 匹配消息的其余部分。

此外,:help 'errorformat':help 'makeprg' 的正确位置是 :help :compiler 文件:

" in a minimal compiler/spectral.vim
if exists("current_compiler")
    finish
endif
let current_compiler = "spectral"
CompilerSet makeprg=spectral\ lint\ %\ -f\ text
CompilerSet errorformat=%f:%l:%c\ %t%.%\{-}\ %m

OpenAPI 检测逻辑的正确位置是 :help ftplugin:

" in a minimal after/ftplugin/yaml.vim
if getline(1) =~ 'openapi:'
    compiler spectral
endif