Neovim >= 0.7 (extmarks) jsregexp
для lsp-snippet-transformations
(некоторые советы по установке см. здесь).
С помощью предпочитаемого вами менеджера плагинов, например vim-plug, Packer или lazy.
Упаковщик :
use ({
" L3MON4D3/LuaSnip " ,
-- follow latest release.
tag = " v2.* " , -- Replace <CurrentMajor> by the latest released major (first number of latest release)
-- install jsregexp (optional!:).
run = " make install_jsregexp "
})
ленивый :
{
" L3MON4D3/LuaSnip " ,
-- follow latest release.
version = " v2.* " , -- Replace <CurrentMajor> by the latest released major (first number of latest release)
-- install jsregexp (optional!).
build = " make install_jsregexp "
}
vim-плагин :
" follow latest release and install jsregexp.
Plug ' L3MON4D3/LuaSnip ' , { ' tag ' : ' v2.* ' , ' do ' : ' make install_jsregexp ' } " Replace <CurrentMajor> by the latest released major (first number of latest release)
Проверьте раздел Releases
справа, чтобы найти последнюю основную версию.
LuaSnip использует семантическое управление версиями (с некоторой допуском большие патчи могут оказаться второстепенными версиями)!
Релизы будут помечены как vMajor.Minor.Patch
, мы рекомендуем следить за последним основным выпуском.
Рассмотрите возможность просмотра выпусков репозитория, чтобы получать уведомления о появлении новой версии.
Примечание
В Windows вам необходимо использовать оболочку, которая может запускать команды Unix (MinGW, MSYS2 и т. д.). К счастью, Git предлагает sh.exe
, поэтому вам не нужно устанавливать тяжелую среду MSYS2. Помимо Git, вам также понадобится компилятор C и make
для установки jsregexp
. Вам также может потребоваться изменить команду сборки: make install_jsregexp CC=gcc.exe SHELL=C:/path/to/sh.exe .SHELLFLAGS=-c
:
SHELL=C:/path/to/Git/usr/bin/sh.exe # if Git/MinGW/MSYS2 `sh.exe` is not in PATH
.SHELLFLAGS=-c # if Git/MinGW/MSYS2 `sh.exe` is not in PATH
CC=gcc.exe # if CC's default value cc is not set (when `which cc` fails to find the compiler command)
NEOVIM_BIN_PATH=C:/path/to/Neovim/bin # if the Makefile fails to automatically detect the Neovim/bin path
В сценарии Vim с <Tab>
для перехода вперед/расширения фрагмента, <Shift-Tab>
для перехода назад и <Ctrl-E>
для изменения текущего выбора в choiceNode
...
" press <Tab> to expand or jump in a snippet. These can also be mapped separately
" via <Plug>luasnip-expand-snippet and <Plug>luasnip-jump-next.
imap <silent> <expr> <Tab> luasnip#expand_or_jumpable() ? ' <Plug> luasnip-expand-or-jump' : ' <Tab> '
" -1 for jumping backwards.
inoremap <silent> <S-Tab> <cmd> lua require'luasnip'.jump(-1) <Cr>
snoremap <silent> <Tab> <cmd> lua require('luasnip').jump(1) <Cr>
snoremap <silent> <S-Tab> <cmd> lua require('luasnip').jump(-1) <Cr>
" For changing choices in choiceNodes (not strictly necessary for a basic setup).
imap <silent> <expr> <C-E> luasnip#choice_active() ? ' <Plug> luasnip-next-choice' : ' <C-E> '
smap <silent> <expr> <C-E> luasnip#choice_active() ? ' <Plug> luasnip-next-choice' : ' <C-E> '
... или в Lua, с другим набором клавиш: <Ctrl-K>
для расширения, <Ctrl-L>
для перехода вперед, <Ctrl-J>
для перехода назад и <Ctrl-E>
для изменения активного выбор.
local ls = require ( " luasnip " )
vim . keymap . set ({ " i " }, " <C-K> " , function () ls . expand () end , { silent = true })
vim . keymap . set ({ " i " , " s " }, " <C-L> " , function () ls . jump ( 1 ) end , { silent = true })
vim . keymap . set ({ " i " , " s " }, " <C-J> " , function () ls . jump ( - 1 ) end , { silent = true })
vim . keymap . set ({ " i " , " s " }, " <C-E> " , function ()
if ls . choice_active () then
ls . change_choice ( 1 )
end
end , { silent = true })
Вики-страница nvim-cmp
также содержит пример настройки отображения в виде супертабуляции.
Ознакомьтесь с документом, чтобы получить общее объяснение загрузчиков и их преимуществ. Следующий список служит лишь кратким обзором.
Подобие VS Code : чтобы использовать существующие фрагменты стиля VS Code из плагина (например, rafamadriz/Friendly-Snippets), просто установите плагин, а затем добавьте
require ( " luasnip.loaders.from_vscode " ). lazy_load ()
где-то в вашей конфигурации Neovim. LuaSnip затем загрузит фрагменты, содержащиеся в плагине, при запуске. Вы также можете легко загрузить свои собственные фрагменты кода в стиле VSCode , передав путь к пользовательскому каталогу фрагментов функции загрузки:
-- load snippets from path/of/your/nvim/config/my-cool-snippets
require ( " luasnip.loaders.from_vscode " ). lazy_load ({ paths = { " ./my-cool-snippets " } })
Для получения дополнительной информации о загрузчике VS Code ознакомьтесь с примерами или документацией.
SnipMate-like : очень похоже на пакеты VS Code; установите плагин, предоставляющий фрагменты, и вызовите функцию load
:
require ( " luasnip.loaders.from_snipmate " ). lazy_load ()
Формат SnipMate очень прост, поэтому для добавления пользовательских фрагментов требуется всего несколько шагов:
init.vim
(или любым другим местом в вашем runtimepath
) с именем snippets
.<filetype>.snippets
и добавьте в них фрагменты для данного типа файлов (для вдохновения проверьте honza/vim-snippets). # comment
snippet <trigger> <description>
<snippet-body>
snippet if C-style if
if ( $1 )
$0
Опять же, есть несколько примеров и документации.
Lua : добавьте фрагменты, вызвав require("luasnip").add_snippets(filetype, snippets)
. Пример этого можно найти здесь.
Это также можно сделать намного проще, со всеми преимуществами использования загрузчика, используя загрузчик для Lua.
Также существует репозиторий, в котором собраны фрагменты кода для разных языков: molleweide/LuaSnip-snippets.nvim.
У вас есть два основных варианта: использовать фрагменты кода SnipMate/VS Code (проще) или писать фрагменты на Lua (более сложный, но и более функциональный). Вот несколько советов для начала в любом случае:
DOC.md
Из этих двух SnipMate определенно является более удобным способом написания фрагментов.config
: Примечательно: region_check_events
для перехода к концу фрагментов, внутри которых больше нет курсора, delete_check_events
для очистки фрагментов, текст которых был удален, и enable_autosnippets
для включения автоматического расширения фрагмента.extras
: Этот модуль содержит множество функций, которые значительно упрощают написание фрагментов; fmt
и lambda
особенно полезны.lua-loader
: очень полезный способ загрузки фрагментов, более удобный, чем вызов add_snippets
.functionNode
, dynamicNode
, choiceNode
и restoreNode
.Примечание. Вместо того, чтобы сразу читать официальную документацию, вы можете просмотреть раздел «Ресурсы для новых пользователей» ниже, поскольку документация написана скорее как справочное руководство, чем как руководство для новых пользователей.
DOC.md
— это основная документация: он дает обзор того, как писать фрагменты, объясняет роль и вариант использования каждого узла LuaSnip, показывает, как загружать фрагменты из форматов Lua, VS Code и SnipMate, а также описывает доступный API LuaSnip. .:help luasnip.txt
— это текстовая версия DOC.md
доступная с помощью функции :help
Neovim.Examples/snippets.lua
содержит множество фрагментов примеров, написанных на Lua — мы настоятельно рекомендуем просмотреть (или, еще лучше, :luafile
) эти фрагменты примеров, прежде чем использовать расширенные функции LuaSnip.DOC.md
【中文版】DOC на китайском языке здесь.
Вот несколько видеороликов и руководств по LuaSnip в Интернете:
ls.add_snippets
вместо ls.snippets = {}
Вдохновлен vsnip.vim