hover.nvim
hover.nvim copied to clipboard
Hover plugin framework for Neovim
WIP
hover.nvim
General framework for context aware hover providers (similar to vim.lsp.buf.hover).
Screenshots
| LSP | Github Issues |
![]() |
![]() |
| Dictionary | |
![]() |
Setup and Installation
via packer:
use {
"lewis6991/hover.nvim",
config = function()
require("hover").setup {
init = function()
-- Require providers
require("hover.providers.lsp")
-- require('hover.providers.gh')
-- require('hover.providers.jira')
-- require('hover.providers.man')
-- require('hover.providers.dictionary')
end,
preview_opts = {
border = nil
},
-- Whether the contents of a currently open hover window should be moved
-- to a :h preview-window when pressing the hover keymap.
preview_window = false,
title = true
}
-- Setup keymaps
vim.keymap.set("n", "K", require("hover").hover, {desc = "hover.nvim"})
vim.keymap.set("n", "gK", require("hover").hover_select, {desc = "hover.nvim (select)"})
end
}
Built in Providers
LSP
require('hover.providers.lsp')
Builtin LSP
Priority: 1000
Github
require('hover.providers.gh')
Opens issue/PR's for symbols like #123.
Requires the gh command.
Priority: 200
Jira
require('hover.providers.jira')
Opens issue for symbols like ABC-123.
Requires the jira command.
Priority: 175
Man
require('hover.providers.man')
man entries
Priority: 150
Dictionary
require('hover.providers.dictionary')
Definitions for valid words
Priority: 100
Creating a hover provider
Call require('hover').register(<provider>) with a table containing the following fields:
name: string, name of the hover providerenabled: function, whether the hover is active for the current contextexecute: function, executes the hover. Has the following arguments:done: callback. First argument should be passed:nil/falseif the hover failed to execute. This will allow other lower priority hovers to run.- A table with the following fields:
lines(string array)filetype(string)
priority: number (optional), priority of the provider
Example:
-- Simple
require('hover').register {
name = 'Simple',
enabled = function()
return true
end,
execute = function(done)
done{lines={'TEST'}, filetype="markdown"}
end
}


