数学联邦政治世界观
超小超大

Zig语言之Vim编辑器的LSP环境配置

俗话说,工欲善其事,必先利其器。要编写大型的Zig语言的项目,如果没有LSP插件的支持,是很不好用的。所以,这篇文章就介绍Zig语言的LSP插件的配置过程。我使用的Vim编辑器,版本是9.1,所以就介绍Vim9.0以上的Zig的LSP插件的配置过程。

首先是选择VIM下LSP插件的配置方式使用哪一种,其中有CoC、YouCompleteme等,但这两个都太重量级了,特别是CoC,还需要依赖node.js,node.js占用磁盘空间和内存都多,我又不写js。所以这两个都不想安装,选来选去,看到vim-lsp挺不错的,可以简单的通过vim-plug来安装。于是就选择了vim-lsp了。

首先,我们使用如下命令来安装vim-plug,我用的是macOS,所以选用unix的方式来安装:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \

然后在.vimrc文件中加入如下的插件列表描述:

call plug#begin()

" List your plugins here

Plug 'tpope/vim-sensible'

call plug#end()

然后使用:PlugInstall命令安装插件即可。

接下来,我们安装vim-lsp相关的插件,以及自动补全相关的插件,类似vscode的浮窗插件等,主要有如下这些插件,加入到上面的plugin列表中即可:

Plug 'prabirshrestha/vim-lsp'

Plug 'prabirshrestha/asyncomplete.vim'

Plug 'prabirshrestha/asyncomplete-lsp.vim'

Plug 'mattn/vim-lsp-settings'

Plug 'SirVer/ultisnips'

Plug 'thomasfaingnaert/vim-lsp-snippets'

Plug 'thomasfaingnaert/vim-lsp-ultisnips'

使用:PlugInstall命令把这些插件都安装上,耐心等待一段时间就可完成。

这些插件安装好后,还需要在.vimrc中加一些简单的配置,主要是键映射和快捷键定义。具体配置如下

" for asyncomplete

inoremap pumvisible() ? "\" : "\"

inoremap pumvisible() ? "\" : "\"

inoremap pumvisible() ? asyncomplete#close_popup() : "\"

" for vim-lsp

function! s:on_lsp_buffer_enabled() abort

setlocal omnifunc=lsp#complete

setlocal signcolumn=yes

if exists('+tagfunc') | setlocal tagfunc=lsptagfunc:| 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

" nnoremap <buffer><expr><c-f> lsp#scroll(+4)

" nnoremap

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

" for ultisnips

let g:UltiSnipsExpandTrigger="<tab>"

let g:UltiSnipsJumpForwardTrigger="<tab>"

let g:UltiSnipsJumpBackwardTrigger="<s-tab>"

set completeopt+=menuone

最后,我们就需要安装Zig语言的LSP插件zls了。先用homebrew安装zls,命令是brew install zls。然后将目录切换到随便一个Zig项目,用vim打开一个后缀为.zig的Zig源代码文件。然后用命令:LspInstallServer在vim中安装和配置zls插件。因为Zig现在有一个bug,通过代理下载文件会出错,所以这个插件安装过程会出错,但是可以不用管它。这个安装zls的命令执行完成后,退出vim,执行如下命令将zls.json的配置复制到zls的缺省配置目录下:

cp ~/.local/share/vim-lsp-settings/servers/zls/zls.json ~/Library/Application\ Support/

这个zls的缺省配置目录可以使用命令zls --show-config-path来得到。

这一切都完成后,Vim下的LSP插件环境和Zig的zls插件就安装好了,让我们来看一下编辑Zig源代码文件的效果。

可以看到,补全的浮窗效果非常好,和vscode的很像了。

vim-lsp配置好后,安装其他语言的lsp插件就很简单了,比如C/C++的插件,只要打开C/C++的源文件,执行命令:LspInstallServer就安装好了。

这个vim-lsp和zls的配合效果非常好,完全可以应付大型项目的函数和变量定义跳转、调用查找、自动补全、函数类型浮窗提示等功能,而且响应非常快,对CPU的消耗也很低。我非常满意。

数学联邦政治世界观提示您:看后求收藏(笔尖小说网http://www.bjxsw.cc),接着再看更方便。

相关小说

时钟妤你 连载中
时钟妤你
沈噫予
茫茫人海与你相遇,这是真正的幸运
0.2万字5个月前
愚人众执行官深空之恋(又名:原神深空传) 连载中
愚人众执行官深空之恋(又名:原神深空传)
琉璃女帝
愚人深空智慧超能力执行官传奇无人深空恋与制作人恋与深空探险冒险探索背景的“智慧超能力执行官传奇”故事:愚人众执行官恋与深空智慧城市智慧智能机......
64.7万字4个月前
你就是我的救赎mr 连载中
你就是我的救赎mr
陌然mrr
有一位叫做梦佳的神明,因神明有一项不能拥有感情的规则,所以从小便欠缺感情,她自己也知道自己和别的神明不一样,她更想要拥有感情的生活,没有感情......
2.8万字4个月前
她不是疯子 连载中
她不是疯子
墨玉菏
特点:生性自在散漫,不愿受世俗约束,道德感比较模糊,遇好人则菩萨心肠,遇坏人则sha人如麻不是小人,也不愿做道貌岸然的君
0.9万字4个月前
快穿:万年女配要翻身 连载中
快穿:万年女配要翻身
梁凉了
一不小心穿越了一回,系统君竟然给了无数个女配剧本!接受吧,被男女主虐死!不接受吧,马上死!灰飞烟灭的那种。于是,她妥协了。拿着女配剧本穿梭于......
53.3万字3个月前
愿太阳 连载中
愿太阳
几年愿
重要的事说三遍,无恋爱无恋爱无恋爱主人公是一颗星星是一个童话类的文比较治愈讲述主人公星日原先是一颗很开朗的星星但后来因外婆去世又遭受许多失落......
0.1万字1周前