Neovim >= 0.7 (extmarks) jsregexp
para lsp-snippet-transformations
(consulte aquí para obtener algunos consejos sobre cómo instalarlo).
Con su administrador de complementos preferido, es decir, vim-plug, Packer o lazy
Empaquetador :
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 "
})
perezoso :
{
" 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 "
}
enchufe 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)
Consulte la sección Releases
a la derecha para conocer la última versión principal.
¡LuaSnip utiliza versiones semánticas (con cierta libertad, los parches grandes pueden terminar como una versión menor)!
Las versiones se etiquetarán como vMajor.Minor.Patch
; recomendamos seguir la última versión principal.
Considere ver las versiones del repositorio para recibir una notificación cuando esté disponible una nueva versión.
Nota
En Windows, necesita utilizar un shell que pueda ejecutar comandos de Unix (MinGW, MSYS2, etc.). Afortunadamente, Git ofrece un sh.exe
, por lo que no es necesario instalar un entorno MSYS2 pesado. Además de Git, también necesitas un compilador de C y make
para instalar jsregexp
. Es posible que también necesite cambiar el comando de compilación: 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
En el script de Vim, con <Tab>
para saltar hacia adelante/expandir un fragmento, <Shift-Tab>
para saltar hacia atrás y <Ctrl-E>
para cambiar la elección actual cuando se está en un 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> '
... o en Lua, con un conjunto diferente de teclas: <Ctrl-K>
para expandir, <Ctrl-L>
para saltar hacia adelante, <Ctrl-J>
para saltar hacia atrás y <Ctrl-E>
para cambiar el activo elección.
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 })
La wiki de nvim-cmp
también contiene un ejemplo para configurar un mapeo tipo súper pestaña.
Consulte el documento para obtener una explicación general de los cargadores y sus beneficios. La siguiente lista sirve sólo como una breve descripción.
Similar a VS Code : para usar fragmentos de estilo de VS Code existentes de un complemento (por ejemplo, rafamadriz/friendly-snippets), simplemente instale el complemento y luego agregue
require ( " luasnip.loaders.from_vscode " ). lazy_load ()
en algún lugar de su configuración de Neovim. Luego, LuaSnip cargará los fragmentos contenidos en el complemento al inicio. También puede cargar fácilmente sus propios fragmentos de estilo VSCode personalizados pasando la ruta al directorio de fragmentos personalizado a la función de carga:
-- load snippets from path/of/your/nvim/config/my-cool-snippets
require ( " luasnip.loaders.from_vscode " ). lazy_load ({ paths = { " ./my-cool-snippets " } })
Para obtener más información sobre el cargador de VS Code, consulte los ejemplos o la documentación.
Tipo SnipMate : muy similar a los paquetes de VS Code; instale un complemento que proporcione fragmentos y llame a la función de load
:
require ( " luasnip.loaders.from_snipmate " ). lazy_load ()
El formato SnipMate es muy simple, por lo que agregar fragmentos personalizados solo requiere unos pocos pasos:
init.vim
(o cualquier otro lugar que esté en su runtimepath
) llamado snippets
.<filetype>.snippets
y agregue fragmentos para el tipo de archivo dado (para inspirarse, consulte honza/vim-snippets). # comment
snippet <trigger> <description>
<snippet-body>
snippet if C-style if
if ( $1 )
$0
Nuevamente, hay algunos ejemplos y documentación.
Lua : agregue los fragmentos llamando require("luasnip").add_snippets(filetype, snippets)
. Un ejemplo de esto se puede encontrar aquí.
Esto también se puede hacer de forma mucho más limpia, con todos los beneficios que conlleva el uso de un cargador, utilizando el cargador para Lua.
También hay un repositorio que recopila fragmentos para varios idiomas, molleweide/LuaSnip-snippets.nvim.
Tiene dos opciones principales: usar fragmentos de código SnipMate/VS (más fácil) o escribir fragmentos en Lua (más complejo pero también con más funciones). Aquí hay algunas sugerencias para comenzar en cualquier caso:
DOC.md
De esos dos, SnipMate es definitivamente la forma más cómoda de escribir fragmentos.config
: Notable: region_check_events
para saltar al final de los fragmentos en los que el cursor ya no está, delete_check_events
para limpiar fragmentos cuyo texto se eliminó y enable_autosnippets
para habilitar la expansión automática de fragmentos.extras
: este módulo contiene muchas funciones que facilitan significativamente la escritura de fragmentos; fmt
y lambda
son especialmente útiles.lua-loader
: una forma muy útil de cargar fragmentos, más cómoda que llamar add_snippets
.functionNode
, dynamicNode
, choiceNode
y restoreNode
.Nota: en lugar de leer inmediatamente la documentación oficial, es posible que desee consultar la sección Recursos para nuevos usuarios a continuación, ya que los documentos están escritos más como un manual de referencia que como un tutorial para nuevos usuarios.
DOC.md
es la documentación principal: ofrece una descripción general de cómo escribir fragmentos, explica la función y el caso de uso de cada nodo LuaSnip, muestra cómo cargar fragmentos de los formatos Lua, VS Code y SnipMate, y cubre la API de LuaSnip disponible. .:help luasnip.txt
es una versión de texto plano de DOC.md
disponible con la función :help
de Neovim.Examples/snippets.lua
contiene muchos fragmentos de ejemplo escritos en Lua; recomendamos encarecidamente revisar (o mejor aún, :luafile
ing) estos fragmentos de ejemplo antes de usar las funciones avanzadas de LuaSnip.DOC.md
【中文版】DOC en chino está aquí.
Aquí hay algunos videos y tutoriales de LuaSnip en la Web:
ls.add_snippets
en lugar de con ls.snippets = {}
Inspirado por vsnip.vim