A lightweight Neovim plugin for fast function navigation using Tree-sitter.

https://github.com/user-attachments/assets/b539c3cb-654c-435e-98ed-11bc93823e1a
/ to fuzzy-search functions (telescope-style prompt with live preview)0.6 = 60%) for window dimensions that adapt to terminal size| Language | File Types | Extractor |
|---|---|---|
| JavaScript | .js |
Dedicated (handles exports, arrow functions, object methods) |
| TypeScript | .ts |
Dedicated (shared with JS) |
| React (JSX/TSX) | .jsx, .tsx |
Dedicated (shared with JS) |
| Vue | .vue |
Dedicated (SFC support via language injections, includes composables and lifecycle hooks) |
| All others | Any | Generic (matches any node with "function" or "method" in its type) |
The generic extractor covers Lua, Go, Python, Ruby, Rust, C, Java, and any other language with a Tree-sitter parser installed.
{
"beargruug/skipper.nvim",
config = function()
require("skipper").setup()
end,
}
Plug 'beargruug/skipper.nvim'
Then add to your config:
require("skipper").setup()
use {
"beargruug/skipper.nvim",
config = function()
require("skipper").setup()
end,
}
Skipper.nvim comes with sensible defaults, but you can customize it:
require("skipper").setup({
win_width = 0.3, -- Width (fraction 0-1 for %, or integer for columns)
win_height = 0.2, -- Height (fraction 0-1 for %, or integer for rows)
border = "single", -- Border style ("single", "double", "rounded", "none", or table)
title = "Skipper", -- Window title
filter_favorites = true, -- Hide favorited functions from the main list
preview = true, -- Show live preview of selected function
preview_height = 0.2, -- Preview window height
preview_width = 0.3, -- Preview window width
preview_position = "right", -- Preview position ("top", "bottom", "left", "right")
})
Window dimensions support both absolute and fractional values:
0 < value < 1): Interpreted as a percentage of terminal size. E.g. win_width = 0.6 means 60% of columns.value >= 1): Used as exact columns/rows. E.g. win_width = 80 means 80 columns.All sizes are clamped to a minimum of 10 and maximum of terminal_size - 4 at window-open time.
| Command | Description |
|---|---|
:ShowFunctionsWindow |
Open the function navigation window |
Add a keymap to quickly open the function window:
vim.keymap.set("n", "<leader>cf", "<cmd>ShowFunctionsWindow<CR>", { desc = "Show functions" })
Or call the Lua API directly:
vim.keymap.set("n", "<leader>cf", function()
require("skipper").show_functions_window()
end, { desc = "Show functions" })
Once the function window is open:
| Key | Action |
|---|---|
j / k |
Navigate up/down the function list |
<CR> |
Jump to the selected function |
/ |
Open fuzzy filter |
a |
Toggle favorite |
x |
Remove favorite (in favorites section) |
q |
Close the window |
<Esc> |
Close the window |
<C-c> |
Close the window |
? |
Toggle help menu |
Press / to open a telescope-style filter prompt below the function list. As you type, results are filtered using fuzzy matching and the preview updates live.
| Key | Action |
|---|---|
| Type text | Filter functions by name |
<Up> / <C-k> |
Move selection up |
<Down> / <C-j> |
Move selection down |
<CR> |
Jump to selected match |
<Esc> |
Cancel filter, restore full list |
<C-c> |
Cancel filter, restore full list |
Functions can be pinned as favorites. Favorites appear at the top of the list, separated from the main function list. When filter_favorites = true (default), favorited functions are hidden from the main list to avoid duplication.
Run :checkhealth skipper to verify your setup. It checks for Tree-sitter availability and installed parsers.
Contributions are welcome! Please feel free to submit issues and pull requests.
Skipper.nvim is under active development. Feedback, issue reports, and pull requests are always welcome.
MIT