从零开始配置vim(26)——LSP UI 美化

2022-10-28 15:18:30 浏览数 (1)

之前我们通过几个实例演示如何配置其他语言的lsp服务,相信各位小伙伴碰到其他的编程语言也能熟练的配置它对应的lsp服务。本篇讲作为一个补充,我们来优化一下LSP 相关的显示

配置 UI

原始的 lsp 显示有点素,我们使用插件对它进行一些美化,这里使用插件 lspsaga.nvim 。使用如下的代码进行安装

代码语言:javascript复制
use{"glepnir/lspsaga.nvim"}

然后我们新建一个 plugin-config/lspsaga.lua 对它进行配置

代码语言:javascript复制
local saga = require('lspsaga')
saga.init_lsp_saga()

该插件对 NeoVim 原生 LSP 显示做了一些更改,并提供了一些方便的命令来实现LSP 相关的功能。我们将它对应的功能绑定到快捷键上替换原有的 LSP 对应的快捷键

代码语言:javascript复制
lsp_keybinds.set_keymap = function (bufnr)
    print("set lsp keymap")
    -- 跳转到声明
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>Lspsaga peek_definition<CR>", {silent = true, noremap = true})
    -- 跳转到定义
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.definition()<CR>", {silent = true, noremap = true})
    -- 显示注释文档
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gh", "<cmd>Lspsaga lsp_finder<CR>", {silent = true, noremap = true})
    -- 跳转到实现
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", {silent = true, noremap = true})
    -- 跳转到引用位置
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>Lspsaga rename<CR>", {silent = true, noremap = true})
    -- 以浮窗形式显示错误
    vim.api.nvim_buf_set_keymap(bufnr, "n", "go", "<cmd>lua vim.diagnostic.open_float()<CR>", {silent = true, noremap = true})
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gp", "<cmd>lua vim.diagnostic.goto_prev()<CR>", {silent = true, noremap = true})
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gn", "<cmd>lua vim.diagnostic.goto_next()<CR>", {silent = true, noremap = true})
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>cd", "<cmd>Lspsaga show_cursor_diagnostics<CR>", {silent = true, noremap = true})
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>cd", "<cmd>Lspsaga show_line_diagnostics<CR>", {silent = true, noremap = true})
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>ca", "<cmd>Lspsaga code_action<CR>", {silent = true, noremap = true})
    vim.api.nvim_buf_set_keymap(bufnr, "v", "<leader>ca", "<cmd>Lspsaga code_action<CR>", {silent = true, noremap = true})
end

我们可以对比一下原生的 lsp 界面和 lspsaga 界面,我这里使用 gh 这个命令进行对比

我们可以看到它能显示更丰富的信息,而且我们可以根据显示快速跳转到对应位置。对于我们查阅代码也是一个大的提升

而且它还提供 code action 相关的功能。例如上面的截图中它在出现错误的一行代码的行号前以小灯泡的形式进行标记,体验类似与 VS Code。我们将光标放在对应位置,使用绑定的快捷键 <leader>ca 。它会显示出对应的修复方案

当然它的功能还不止于此,各位小伙伴可以去对应的官网上阅读相关文档,针对自己的需求进行进一步的配置

显示符号表

我们可以使用插件 symbols-outline 在窗口右侧显示当前 buffer 中出现的类、方法等符号,方便我们快速跳转到想去的地方。 该插件仅支持 NeoVim7,0 以上的版本。使用下面的代码进行安装

代码语言:javascript复制
use {'simrat39/symbols-outline.nvim'}

还是额外的给它创建一个文件保存它的配置

代码语言:javascript复制
require("symbols-outline").setup()

配置完成之后我们可以使用 :SymbolsOutline 命令来控制窗口的打开和关闭,为了方便我们可以绑定到一个快捷上

代码语言:javascript复制
vim.api.nvim_set_keymap("n", "<leader>so", "<cmd>SymbolsOutline<CR>", {silent = true, noremap = true})

最终的效果如下图所示

本章我们对之前的LSP 配置进行了一定程度的优化,优化了使用的体验。截止到当前文章我们已经完成了代码的高亮、跳转、语法分析、代码补全、错误提示以及修复建议的相关配置。关于LSP的相关配置已经结束了,下一篇我们将要讨论如何使用代码片段进一步减少我们编码时输入的字符数。请各位敬请期待

0 人点赞