You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何滚动kkharji/lspsaga.nvim生成的Hover文档?

如何滚动Lspsaga的Hover文档?

我使用:Lspsaga hover_doc命令查看光标所在函数/方法的Hover文档时,该怎么滚动这个文档?以下是我的Lspsaga配置:

local lspsaga = require 'lspsaga'
lspsaga.setup { -- defaults ...
  debug = false,
  use_saga_diagnostic_sign = true,
  -- diagnostic sign
  error_sign = "",
  warn_sign = "",
  hint_sign = "",
  infor_sign = "",
  diagnostic_header_icon = "   ",
  -- code action title icon
  code_action_icon = " ",
  code_action_prompt = {
    enable = true,
    sign = true,
    sign_priority = 40,
    virtual_text = true,
  },
  finder_definition_icon = "  ",
  finder_reference_icon = "  ",
  max_preview_lines = 10,
  finder_action_keys = {
    open = "o",
    vsplit = "s",
    split = "i",
    quit = "q",
    scroll_down = "<C-j>",
    scroll_up = "<C-k>",
  },
  code_action_keys = {
    quit = "q",
    exec = "<CR>",
  },
  rename_action_keys = {
    quit = "<C-c>",
    exec = "<CR>",
  },
  definition_preview_icon = "  ",
  border_style = "single",
  rename_prompt_prefix = "➤",
  rename_output_qflist = {
    enable = false,
    auto_open_qflist = false,
  },
  server_filetype_map = {},
  diagnostic_prefix_format = "%d. ",
  diagnostic_message_format = "%m %c",
  highlight_prefix = false,
}

local wk = require("which-key")
wk.register({
  ['gr'] =  {'<Cmd>Lspsaga rename<CR>', 'Lspsaga Rename'},
  ['gx'] =  {'<Cmd>Lspsaga code_action<CR>', 'Lspsaga Code Action'},
  ['K'] =   {'<Cmd>Lspsaga hover_doc<CR>', 'Lspsaga hover document'},
  ['go'] =  {'<Cmd>Lspsaga show_line_diagnostics<CR>', 'Lspsaga show_line_diagnostics'},
  ['gj'] =  {'<Cmd>Lspsaga diagnostic_jump_next<CR>', 'Lspsaga diagnostic_jump_next'},
  ['gk'] =  {'<Cmd>Lspsaga diagnostic_jump_prev<CR>', 'Lspsaga diagnostic_jump_next'},
})

--- In lsp attach function
local map = vim.api.nvim_buf_set_keymap
--- map(0, "n", "gr", "<cmd>Lspsaga rename<cr>", {silent = true, noremap = true})
--- map(0, "n", "gx", "<cmd>Lspsaga code_action<cr>", {silent = true, noremap = true})
--- map(0, "x", "gx", ":<c-u>Lspsaga range_code_action<cr>", {silent = true, noremap = true})
--- map(0, "n", "K",  "<cmd>Lspsaga hover_doc<cr>", {silent = true, noremap = true})
--- map(0, "n", "go", "<cmd>Lspsaga show_line_diagnostics<cr>", {silent = true, noremap = true})
--- map(0, "n", "gj", "<cmd>Lspsaga diagnostic_jump_next<cr>", {silent = true, noremap = true})
--- map(0, "n", "gk", "<cmd>Lspsaga diagnostic_jump_prev<cr>", {silent = true, noremap = true})
map(0, "n", "<C-u>", "<cmd>lua require('lspsaga.action').smart_scroll_with_saga(-1, '<c-u>')<cr>", {})
map(0, "n", "<C-d>", "<cmd>lua require('lspsaga.action').smart_scroll_with_saga(1, '<c-d>')<cr>", {})

解决方案

从你的配置来看,你已经设置了智能滚动映射,直接用以下快捷键即可滚动Hover文档:

  • 向上滚动:<C-u>(Ctrl+u)
  • 向下滚动:<C-d>(Ctrl+d)

这两个映射通过require('lspsaga.action').smart_scroll_with_saga实现,它会自动识别当前打开的是Lspsaga的浮动窗口(比如Hover文档、定义预览等),并执行对应的滚动操作,不会影响普通窗口的滚动行为。

如果需要自定义滚动快捷键,可以修改lsp attach函数中的映射代码,把<C-u>/<C-d>换成你习惯的按键。比如改成<C-j>和<C-k>:

map(0, "n", "<C-j>", "<cmd>lua require('lspsaga.action').smart_scroll_with_saga(1, '<c-j>')<cr>", {})
map(0, "n", "<C-k>", "<cmd>lua require('lspsaga.action').smart_scroll_with_saga(-1, '<c-k>')<cr>", {})

另外,也可以在Hover文档窗口中直接使用鼠标滚轮滚动(如果你的Neovim配置支持鼠标的话)。


内容的提问来源于stack exchange,提问作者musako

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:25:00