Neovim >= 0.7 (extmarks) jsregexp
para lsp-snippet-transformations
(veja aqui algumas dicas sobre como instalá-lo).
Com o seu gerenciador de plugins preferido, ou seja, vim-plug, Packer ou preguiçoso
Empacotador :
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 "
})
preguiçoso :
{
" 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-plug :
" 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)
Verifique a seção Releases
à direita para obter a versão principal mais recente.
LuaSnip usa versionamento semântico (com alguma margem de manobra, grandes patches podem acabar como uma versão secundária)!
As versões serão marcadas como vMajor.Minor.Patch
, recomendamos seguir a versão principal mais recente.
Considere assistir aos lançamentos do repositório para ser notificado quando uma nova versão estiver disponível.
Observação
No Windows, você precisa usar um shell que possa executar comandos Unix (MinGW,MSYS2,etc). Felizmente, o Git oferece um sh.exe
, então você não precisa instalar um ambiente MSYS2 pesado. Além do Git, você também precisa de um compilador C e make
para instalar jsregexp
. Você também pode precisar alterar o comando de construção: 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
No script Vim, com <Tab>
para avançar/expandir um trecho, <Shift-Tab>
para retroceder e <Ctrl-E>
para alterar a escolha atual quando estiver em um 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> '
... ou em Lua, com um conjunto diferente de teclas: <Ctrl-K>
para expandir, <Ctrl-L>
para avançar, <Ctrl-J>
para retroceder e <Ctrl-E>
para alterar o ativo escolha.
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 })
O wiki do nvim-cmp
também contém um exemplo para configurar um mapeamento semelhante a uma superguia.
Confira o documento para uma explicação geral sobre os carregadores e seus benefícios. A lista a seguir serve apenas como uma breve visão geral.
VS Code-like : Para usar snippets de estilo VS Code existentes de um plugin (por exemplo, rafamadriz/friendly-snippets), basta instalar o plugin e adicionar
require ( " luasnip.loaders.from_vscode " ). lazy_load ()
em algum lugar na sua configuração do Neovim. LuaSnip irá então carregar os trechos contidos no plugin na inicialização. Você também pode carregar facilmente seus próprios snippets de estilo VSCode personalizados , passando o caminho para o diretório de snippets personalizados para a função de carregamento:
-- load snippets from path/of/your/nvim/config/my-cool-snippets
require ( " luasnip.loaders.from_vscode " ). lazy_load ({ paths = { " ./my-cool-snippets " } })
Para obter mais informações sobre o carregador do VS Code, verifique os exemplos ou a documentação.
SnipMate-like : muito semelhante aos pacotes do VS Code; instale um plugin que forneça trechos e chame a função load
:
require ( " luasnip.loaders.from_snipmate " ). lazy_load ()
O formato SnipMate é muito simples, portanto, adicionar snippets personalizados requer apenas algumas etapas:
init.vim
(ou qualquer outro lugar que esteja no seu runtimepath
) chamado snippets
.<filetype>.snippets
e adicione trechos para o tipo de arquivo fornecido nele (para inspiração, verifique honza/vim-snippets). # comment
snippet <trigger> <description>
<snippet-body>
snippet if C-style if
if ( $1 )
$0
Novamente, existem alguns exemplos e documentação.
Lua : Adicione os trechos chamando require("luasnip").add_snippets(filetype, snippets)
. Um exemplo disso pode ser encontrado aqui.
Isso também pode ser feito de forma muito mais limpa, com todos os benefícios do uso de um carregador, usando o carregador para Lua
Há também um repositório que coleta trechos para vários idiomas, molleweide/LuaSnip-snippets.nvim
Você tem duas opções principais: usar trechos SnipMate/VS Code (mais fácil) ou escrever trechos em Lua (mais complexos, mas também mais ricos em recursos). Aqui estão algumas sugestões para começar em ambos os casos:
DOC.md
. Desses dois, o SnipMate é definitivamente a maneira mais confortável de escrever trechos.config
: Notável: region_check_events
para pular para o final dos trechos nos quais o cursor não está mais, delete_check_events
para limpar trechos cujo texto foi excluído e enable_autosnippets
para ativar a expansão automática de trechos.extras
: Este módulo contém muitas funções que tornam a escrita de trechos significativamente mais fácil; fmt
e lambda
são especialmente úteis.lua-loader
: Uma maneira muito útil de carregar trechos, mais confortável do que chamar add_snippets
.functionNode
, dynamicNode
, choiceNode
e restoreNode
.Nota: em vez de ler imediatamente a documentação oficial, você pode conferir a seção Recursos para novos usuários abaixo, pois os documentos são escritos mais como um manual de referência do que como um tutorial para novos usuários.
DOC.md
é a documentação principal - fornece uma visão geral de como escrever snippets, explica a função e o caso de uso de cada nó LuaSnip, mostra como carregar snippets dos formatos Lua, VS Code e SnipMate e cobre a API LuaSnip disponível .:help luasnip.txt
é uma versão em texto simples do DOC.md
disponível com o recurso :help
do Neovim.Examples/snippets.lua
contém muitos trechos de exemplo escritos em Lua — é altamente recomendável examinar (ou melhor ainda, :luafile
ing) esses trechos de exemplo antes de usar os recursos avançados do LuaSnip.DOC.md
【中文版】DOC em chinês está aqui.
Aqui estão alguns vídeos e tutoriais do LuaSnip na Web:
ls.add_snippets
em vez de ls.snippets = {}
Inspirado em vsnip.vim