Меню сниппетов для Neovim: показывает JSON-сниппеты в Telescope и разворачивает выбранный через LuaSnip.
- Положи сниппеты в
snippets_dir(структура ниже). - Открой меню:
:SnippetMenu. - Выбери папку (filetype) -> сниппет -> Enter.
- Neovim 0.9+
nvim-telescope/telescope.nvimL3MON4D3/LuaSnip- (опционально)
nvim-tree/nvim-web-deviconsдля иконок filetype
{
"da-b1rmuda/snippetmenu.nvim",
dependencies = {
"nvim-telescope/telescope.nvim",
"L3MON4D3/LuaSnip",
},
config = function()
require("snippet_menu").setup({
-- Путь до папки со сниппетами (имя папки = filetype)
-- snippets_dir = vim.fn.stdpath("config") .. "/snippets",
-- Можно указать несколько директорий:
-- snippets_dir = {
-- vim.fn.stdpath("config") .. "/snippets",
-- vim.fn.stdpath("data") .. "/site/snippets",
-- },
-- Показывать только текущий filetype (и опциональный "all")
-- filter_current_ft = true,
-- Preview справа для сниппетов (Telescope previewer)
-- preview = true,
-- Кэш: ускоряет открытие (не парсит все JSON каждый раз)
-- cache = true,
-- cache_autocmd = true, -- инвалидировать кэш при сохранении *.json внутри snippets_dir
-- Быстрые клавиши внутри Telescope (можно переопределить или отключить)
-- keys = {
-- refresh = "<C-r>", -- пересканировать/перечитать сниппеты
-- back = "<BS>", -- назад к списку папок (в списке сниппетов)
-- back_alt = "x", -- альтернативная клавиша "назад"
-- open_split_preview = "<C-p>" -- toggle preview (если доступно)
-- },
-- Подсказки по клавишам в заголовке Telescope (например: "ESC close • x back")
-- show_hints = true,
})
end,
}Плагин сканирует snippets_dir/**/.json (вложенные папки поддерживаются).
Рекомендуемая структура:
<snippets_dir>/
lua/
basic.json
javascript/
basic.json
typescript/
basic.json
Формат файла: VS Code snippet JSON.
{
"Console log": {
"prefix": ["cl", "log"],
"body": ["console.log($1);"],
"description": "console.log(...)"
}
}Важно: snippet-menu - это меню (Telescope).
Чтобы сниппеты были в nvim-cmp, их должен загрузить LuaSnip loader.
Сам snippet-menu читает *.json напрямую и не требует package.json.
LuaSnip from_vscode ожидает manifest package.json (как у VS Code extension).
Пример: <snippets_dir>/package.json
{
"name": "nvim-local-snippets",
"contributes": {
"snippets": [
{ "language": "javascript", "path": "./javascript/basic.json" },
{ "language": "javascriptreact", "path": "./javascript/basic.json" },
{ "language": "typescript", "path": "./typescript/basic.json" },
{ "language": "typescriptreact", "path": "./typescript/basic.json" }
]
}
}Пример для nvim-cmp (внутри cmp.lua):
local vscode_loader = require("luasnip.loaders.from_vscode")
-- Опционально: friendly-snippets
vscode_loader.lazy_load()
-- Твои JSON сниппеты (где лежит package.json)
vscode_loader.lazy_load({
-- Укажи путь к папке, где лежит package.json (обычно это твой snippets_dir)
paths = { vim.fn.stdpath("config") .. "/snippets" },
})После этого source { name = "luasnip" } в nvim-cmp начнет показывать сниппеты.
- В
cmpнет сниппетов: проверь, что естьpackage.jsonи вызванfrom_vscode.lazy_load({ paths = {...} }). :SnippetMenuне открывается: проверь, что установлен Telescope.- Выбор сниппета не вставляет текст: проверь, что установлен LuaSnip.
