我花了很多时间弄清楚如何在 neovim 中使用 Python (3) 的语言服务器协议 (LSP)。主要是我正在寻找 Python 3 的自动完成功能,它是 PySide2 之类的模块。
可悲的是,我无法让我的配置文件 (.config/vim/init.vim) 工作。我知道github上有很多。但是它们包含了很多额外的功能,以至于我还不能根据我的需要来调整其中的一个。还有一些也已经过时了。
所以这是我迄今为止尝试过的:
www.langserver.org 有很长的语言客户端和服务器列表。
我为 Python 安装了 Palantir 语言服务器协议(https://github.com/palantir/python-language-server):
pip3 install 'python-language-server[all]'
在下一步中,我通过 vim-plug 为 neovim 安装了一个语言客户端。实际上我尝试了几个,但让我们坚持以 ale 为例(https://github.com/dense-analysis/ale):
call plug#begin('~/.local/share/nvim/plugged')
" Plugins:
Plug 'dense-analysis/ale'
" Initialize plugin system
call plug#end()
并通过安装它:PlugInstall
然后必须在加载 Ale 之前进行自动完成设置:
" initialize before ale is loaded
let g:ale_completion_enabled = 1
要与 Omnicompletion 一起使用,还需要另外一项设置:
set omnifunc=ale#completion#OmniFunc
经过一番谷歌搜索后,我读到我必须注册语言服务器(https://vi.stackexchange.com/questions/20958/use-the-pyls-python-lsp-with-ale-on-neovim):
if executable('pyls')
au User lsp_setup call lsp#register_server({
\ 'name': 'pyls',
\ 'cmd': {server_info->['pyls']},
\ 'whitelist': ['python'],
\ })
endif
这给了我最终的 init.vim:
" Specify a directory for plugins
" - For Neovim: ~/.local/share/nvim/plugged
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.local/share/nvim/plugged')
" Plugins go here:
" Language Server Client
Plug 'dense-analysis/ale'
" initialize before ale is loaded
" is that the right spot?
let g:ale_completion_enabled = 1
" Initialize plugin system
call plug#end()
set omnifunc=ale#completion#OmniFunc
" register the language server
if executable('pyls')
au User lsp_setup call lsp#register_server({
\ 'name': 'pyls',
\ 'cmd': {server_info->['pyls']},
\ 'whitelist': ['python'],
\ })
endif
如果我现在打开如下所示的文件并PySide2.
在 nvim 中仅获得以下屏幕后按 Ctrl + N 完成:
#!/usr/bin/env python
>>from PySide2.usr
-- usr
~ bin
~ env
~ python
~ from
~ PySide2
~
它只是一个已经出现在文件中的单词的列表——就像普通的 Omnicompletion 一样,但不是 PySide2 库中的模块。
我只是在寻找一种简约的配置来通过 LSP 启用自动完成功能。