ITADN
prabirshrestha/vim-lsp · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

vim-lsp Gitter

适用于 vim8 和 neovim 的异步 Language Server Protocol 插件。

安装

安装 vim-plug 然后:

Plug 'prabirshrestha/vim-lsp'

性能

Vim 脚本中的某些瓶颈已通过 lua 实现。如果您希望利用这些性能提升, 请使用编译了 lua 的 vim 或 neovim v0.4.0+

注册服务器

if executable('pylsp')
    " pip install python-lsp-server
    au User lsp_setup call lsp#register_server({
        \ 'name': 'pylsp',
        \ 'cmd': {server_info->['pylsp']},
        \ 'allowlist': ['python'],
        \ })
endif

function! s:on_lsp_buffer_enabled() abort
    setlocal omnifunc=lsp#complete
    setlocal signcolumn=yes
    if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
    nmap <buffer> gd <plug>(lsp-definition)
    nmap <buffer> gs <plug>(lsp-document-symbol-search)
    nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
    nmap <buffer> gr <plug>(lsp-references)
    nmap <buffer> gi <plug>(lsp-implementation)
    nmap <buffer> gt <plug>(lsp-type-definition)
    nmap <buffer> <leader>rn <plug>(lsp-rename)
    nmap <buffer> [g <plug>(lsp-previous-diagnostic)
    nmap <buffer> ]g <plug>(lsp-next-diagnostic)
    nmap <buffer> K <plug>(lsp-hover)
    nnoremap <buffer> <expr><c-f> lsp#scroll(+4)
    nnoremap <buffer> <expr><c-d> lsp#scroll(-4)

    let g:lsp_format_sync_timeout = 1000
    autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
    
    " refer to doc to add more commands
endfunction

augroup lsp_install
    au!
    " call s:on_lsp_buffer_enabled only for languages that has the server registered.
    autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END

请参阅 vim-lsp-settings 了解如何使用 vim-lsp 轻松自动设置语言服务器。

Plug 'prabirshrestha/vim-lsp'
Plug 'mattn/vim-lsp-settings'

自动补全

请参阅有关配置 omnifunc 或 asyncomplete.vim 的文档。

Snippets

vim-lsp does not support snippets by default. If you want snippet integration, you will first have to install a third-party snippet plugin and a plugin that integrates it in vim-lsp. At the moment, you have following options:

  1. vim-vsnip together with vim-vsnip-integ
  2. UltiSnips together with vim-lsp-ultisnips
  3. neosnippet.vim together with vim-lsp-neosnippet

有关更多信息,请参阅相应插件的 readme 和文档。

折叠

你可以让语言服务器自动为你处理折叠。要启用此功能,你必须设置 'foldmethod''foldexpr' 和(可选地)'foldtext'

set foldmethod=expr
  \ foldexpr=lsp#ui#vim#folding#foldexpr()
  \ foldtext=lsp#ui#vim#folding#foldtext()

如果您希望全局禁用折叠,可以在配置中添加以下内容:

let g:lsp_fold_enabled = 0

另见 :h vim-lsp-folding

语义高亮

vim-lsp 支持 LSP 协议中用于语义高亮的非官方扩展(https://github.com/microsoft/vscode-languageserver-node/pull/367)。 此功能需要 Neovim 高亮,或启用 textprop 功能的 Vim。 您还需要将语言服务器的语义作用域链接到 Vim 高亮组。 更多信息请参阅 :h vim-lsp-semantic

支持的命令

注意:

  • 某些服务器可能仅支持部分命令。
  • 虽然可以为同一文件类型注册多个服务器,但某些命令只会选择第一个支持该命令的服务器。例如,将重命名和格式化命令发送到多个服务器是没有意义的。
命令描述
:LspAddTreeCallHierarchyIncoming查找光标下符号的传入调用层次结构,但将结果添加到当前列表
:LspCallHierarchyIncoming查找光标下符号的传入调用层次结构
:LspCallHierarchyOutgoing查找光标下符号的传出调用层次结构
:LspCodeAction获取可应用于文件以进行修复(快速修复)的可能命令列表
:LspCodeLens获取可在当前文档上执行的可能命令列表
:LspDeclaration跳转到光标下单词的声明,并在当前窗口中打开
:LspDefinition跳转到光标下单词的定义,并在当前窗口中打开
:LspDocumentDiagnostics获取当前文档的诊断信息
:LspDocumentFormat格式化整个文档
:LspDocumentRangeFormat格式化文档选区
:LspDocumentSymbol显示文档符号
:LspHover显示悬停信息
:LspImplementation在当前窗口中显示接口的实现
:LspNextDiagnostic跳转到下一个诊断(包括错误、警告、信息、提示)
:LspNextError跳转到下一个错误
:LspNextReference跳转到光标下符号的下一个引用
:LspNextWarning跳转到下一个警告
:LspPeekDeclaration跳转到光标下单词的声明,但在预览窗口中打开
:LspPeekDefinition跳转到光标下单词的定义,但在预览窗口中打开
:LspPeekImplementation跳转到接口的实现,但在预览窗口中打开
:LspPeekTypeDefinition跳转到光标下单词的类型定义,但在预览窗口中打开
:LspPreviousDiagnostic跳转到上一个诊断(包括错误、警告、信息、提示)
:LspPreviousError跳转到上一个错误
:LspPreviousReference跳转到光标下符号的上一个引用
:LspPreviousWarning跳转到上一个警告
:LspReferences查找引用
:LspRename重命名符号
:LspStatus显示语言服务器状态
:LspTypeDefinition跳转到光标下单词的类型定义,并在当前窗口打开
:LspTypeHierarchy查看光标下符号的类型层次结构
:LspWorkspaceSymbol搜索/显示工作区符号

诊断

文档诊断(例如警告、错误)默认启用,但如果你 希望关闭它们并改用其他插件(例如 NeomakeALE,请将 g:lsp_diagnostics_enabled 设置为 0

let g:lsp_diagnostics_enabled = 0         " disable diagnostics support

高亮引用

高亮光标下方符号的引用(默认启用)。 您可以通过添加来禁用

let g:lsp_document_highlight_enabled = 0

到你的配置中。

若要更改高亮的样式,你可以设置或链接 lspReference 高亮组,例如:

highlight lspReference ctermfg=red guifg=red ctermbg=green guibg=green

调试

要启用文件日志记录,请设置 g:lsp_log_file

let g:lsp_log_verbose = 1
let g:lsp_log_file = expand('~/vim-lsp.log')

" for asyncomplete.vim log
let g:asyncomplete_log_file = expand('~/asyncomplete.log')

您可以使用 vim 上的插件通过 :CheckHealth 获取服务器的详细状态:

if !has('nvim') | Plug 'rhysd/vim-healthcheck' | endif
CheckHealth

测试

vim-themis 用于测试。要运行 集成测试,gopls 可执行文件必须在路径中。

维护者

支持者

通过每月捐赠支持我们,帮助我们继续开展活动。[成为支持者]

赞助者

成为赞助者,让您的 Logo 出现在我们 GitHub 上的 README 中,并附上指向您网站的链接。[成为赞助者]