阿chai的Neovim配置:LSP还是“LSP”
今天我们继续neonvim相关的配置教程,介绍鼎鼎大名的“LSP”。第一次看的小伙伴请移步如下推文链接。
LSP还是“LSP”
LSP并不是小伙伴中的“LSP”,全称是Language Server Protocol,支持各种编程语言,可通过lua语言在nvim中完成配置。nvim-lsp的官方链接如下:
https://github.com/neovim/nvim-lspconfig.git
可能这样还是不明白,那我们说成大白话,比如在IDE中存在各种查找等等功能,都需要依托LSP。
LSP的配置非常简单,因为nvim中已经包含了语言服务器协议的客户端,因此我们安装nvim-lspconfig即可。
在plug.vim中添加:
Plug 'neovim/nvim-lspconfig'
然后我们重新启动nvim后输入:PlugInstall
即可完成安装。
安装之后的效果如下:
然后我们进行进一步的LSP配置。
“佛系”入口
对于了解和听过vim的小伙伴其实可以想到,配置vim的插件虽说很省心还是也是需要折腾一会的,如果您想开箱即用阿chai的配置,那看这里。
在将阿chai的配置放到自己的配置文件夹后,输入如下命令进行配置。
我们首先在plug.vim中确认的是否有:
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
然后输入:PlugInstall
进行安装。其他配置阿chai已经帮小伙伴们写好。
在安装完成后在你所在的环境中安装npm。如果不安装,在python的补全没什么影响,但是别的语言可能会无法使用。npm的安装可参考阿chai之前的推文。
然后我们可以看一下LSP的docs中的python插件:
阿chai一般使用第一种。
Mac
$ pip install 'python-lsp-server[all]' #使用pip
也可以使用npm安装,详细内容可以去如官方链接查看:
https://github.com/python-lsp/python-lsp-server
Kali Linux
$ pip install 'python-lsp-server[all]' #使用pip
注意,如果是通过conda或者pip创建的虚拟环境,在环境中如果想使用一定要重新安装一下pylsp,要不会无法使用。
我们创建一个123.py
发现已经可以进行补全:
其他的跳转,查找等可自行根据官方文件去阿chai的配置文件中查看。
自己动手
如果想自己动手配置一下请看这里的介绍。
我们看一下配置中lsp-tree:
lsp-config
├── lsp-colors.rc.vim
├── lspconfig.rc.vim
├── lspkind.rc.lua
├── lspsaga.rc.vim
1. definition跳转
按下gd
可进行跳转:
-- Mappings.
local opts = { noremap=true, silent=true }
buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
--...
end
2. LSP-UI 设置
首先在plug上添加:
Plug 'glepnir/lspsaga.nvim'
输入:PlugInstall
安装,然后输入如下设置:
local saga = require 'lspsaga'
saga.init_lsp_saga {
error_sign = '',
warn_sign = '',
hint_sign = '',
infor_sign = '',
border_style = "round",
}
3. 其他快捷键设置
a. Doc悬停
设置后输入Shift+K
可实现操作:
nnoremap <silent>K :Lspsaga hover_doc<CR>
b. Signature
设置后按下Ctrl+K
可实现操作:
inoremap <silent> <C-k> <Cmd>Lspsaga signature_help<CR>
c. Finder
nnoremap <silent> gh <Cmd>Lspsaga lsp_finder<CR>
d. Diagnostics
我们首先安装语言诊断插件(npm用上了):
$ npm install -g diagnostic-languageserver
我们看一下设置文件:
nvim_lsp.diagnosticls.setup {
on_attach = on_attach,
filetypes = { 'javascript', 'javascriptreact', 'json', 'typescript', 'typescriptreact', 'css', 'less', 'scss', 'pandoc' , 'python'},
init_options = {
linters = {
eslint = {
command = 'eslint_d',
rootPatterns = { '.git' },
debounce = 100,
args = { '--stdin', '--stdin-filename', '%filepath', '--format', 'json' },
sourceName = 'eslint_d',
parseJson = {
errorsRoot = '[0].messages',
line = 'line',
column = 'column',
endLine = 'endLine',
endColumn = 'endColumn',
message = '[eslint] ${message} [${ruleId}]',
security = 'severity'
},
securities = {
[2] = 'error',
[1] = 'warning'
}
},
},
filetypes = {
javascript = 'eslint',
javascriptreact = 'eslint',
typescript = 'eslint',
typescriptreact = 'eslint',
},
formatters = {
eslint_d = {
command = 'eslint_d',
rootPatterns = { '.git' },
args = { '--stdin', '--stdin-filename', '%filename', '--fix-to-stdout' },
rootPatterns = { '.git' },
},
prettier = {
command = 'prettier_d_slim',
rootPatterns = { '.git' },
-- requiredFiles: { 'prettier.config.js' },
args = { '--stdin', '--stdin-filepath', '%filename' }
}
},
formatFiletypes = {
css = 'prettier',
javascript = 'prettier',
javascriptreact = 'prettier',
json = 'prettier',
scss = 'prettier',
less = 'prettier',
typescript = 'prettier',
typescriptreact = 'prettier',
json = 'prettier',
}
}
}
e.诊断标志设置
在lsp-config中:
-- icon
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
vim.lsp.diagnostic.on_publish_diagnostics, {
underline = true,
-- This sets the spacing and the prefix, obviously.
virtual_text = {
spacing = 4,
prefix = ''
}
}
)
额外的C/C++
阿chai push倒github的配置中并没有写C/C++怎样配置,那么在这里给大家简单的说一下操作的方法。
C/C++的配置方式与python类似,也在lsp的docs中有说明,我们这里用ccls。
如果是Mac 上的用户也可以用这个,最新的版本支持clang。
a. llvm
我们首先安装llvm:
$ brew install llvm # MacOS
$ sudo apt-get install llvm # Kali Linux
b. npm
然后我们安装npm,如果是Mac M1的虚拟机或者是直接装Linux,安装npm不建议源码编译,因为太久了。不过这里阿chai也附上过程。
源码编译指令(默认路径:/usr/local/bin):
$ cd your_path
$ ./configure
$ make -j4 # 根据自己的设备调整
$ sudo make install
测试:
$ npm --version
$ node --version
c. coc-ccls
在plug.vim中添加:
Plug 'neoclide/coc.nvim', {'branch': 'release'}
使用:PlugInstall
安装。
然后我们
然后我们在nvim中输入CocConfig进入配置文件,复制如下脚本:
"languageserver": {
"ccls": {
"command": "ccls",
"filetypes": ["c", "cpp", "objc", "objcpp"],
"rootPatterns": [".ccls", "compile_commands.json", ".vim/", ".git/", ".hg/"],
"initializationOptions": {
"cache": {
"directory": "/tmp/ccls"
}
}
}
}
输入:CocInstall coc-json等待一会完成
我们创建一个123.cpp的文件,就可以看到补全效果:
其他的配置小伙伴们可以参考上述的介绍。
LSP的介绍我们到这里结束,喜欢的小伙伴可以继续关注官方的插件配置。