Neovim >= 0.7 (extmarks) jsregexp
pour lsp-snippet-transformations
(voir ici pour quelques conseils sur son installation).
Avec votre gestionnaire de plugin préféré, c'est-à-dire vim-plug, Packer ou paresseux
Emballeur :
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 "
})
paresseux :
{
" 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)
Consultez la section Releases
à droite pour connaître la dernière version majeure.
LuaSnip utilise le versioning sémantique (avec une certaine marge de manœuvre, les gros correctifs peuvent finir en version mineure) !
Les versions seront étiquetées comme vMajor.Minor.Patch
, nous vous recommandons de suivre la dernière version majeure.
Pensez à regarder les versions du référentiel afin d'être averti lorsqu'une nouvelle version est disponible.
Note
Sous Windows, vous devez utiliser un shell capable d'exécuter des commandes Unix (MinGW, MSYS2, etc.). Heureusement, Git propose un sh.exe
, vous n'avez donc pas besoin d'installer un environnement MSYS2 lourd. Outre Git, vous avez également besoin d'un compilateur C et make
pour installer jsregexp
. Vous devrez peut-être également modifier la commande de build : 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
Dans le script Vim, avec <Tab>
pour avancer/développer un extrait, <Shift-Tab>
pour sauter en arrière et <Ctrl-E>
pour modifier le choix actuel dans 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> '
... ou en Lua, avec un jeu de touches différent : <Ctrl-K>
pour développer, <Ctrl-L>
pour sauter en avant, <Ctrl-J>
pour sauter en arrière et <Ctrl-E>
pour changer l'actif. choix.
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 })
Le wiki de nvim-cmp
contient également un exemple de configuration d'un mappage de type super-onglet.
Consultez la doc pour une explication générale des chargeurs et de leurs avantages. La liste suivante ne constitue qu'un bref aperçu.
VS Code-like : pour utiliser des extraits de style VS Code existants à partir d'un plugin (par exemple, rafamadriz/friendly-snippets), installez simplement le plugin, puis ajoutez
require ( " luasnip.loaders.from_vscode " ). lazy_load ()
quelque part dans votre configuration Neovim. LuaSnip chargera ensuite les extraits contenus dans le plugin au démarrage. Vous pouvez également facilement charger vos propres extraits de style VSCode personnalisés en transmettant le chemin d'accès au répertoire d'extraits personnalisés à la fonction de chargement :
-- load snippets from path/of/your/nvim/config/my-cool-snippets
require ( " luasnip.loaders.from_vscode " ). lazy_load ({ paths = { " ./my-cool-snippets " } })
Pour plus d'informations sur le chargeur VS Code, consultez les exemples ou la documentation.
SnipMate-like : Très similaire aux packages VS Code ; installez un plugin qui fournit des extraits et appelez la fonction load
:
require ( " luasnip.loaders.from_snipmate " ). lazy_load ()
Le format SnipMate est très simple, donc l'ajout d'extraits personnalisés ne nécessite que quelques étapes :
init.vim
(ou de tout autre endroit se trouvant dans votre runtimepath
) nommé snippets
.<filetype>.snippets
et ajoutez-y des extraits pour le type de fichier donné (pour vous inspirer, consultez honza/vim-snippets). # comment
snippet <trigger> <description>
<snippet-body>
snippet if C-style if
if ( $1 )
$0
Encore une fois, il existe quelques exemples et documentation.
Lua : Ajoutez les extraits en appelant require("luasnip").add_snippets(filetype, snippets)
. Un exemple de ceci peut être trouvé ici.
Cela peut également être fait de manière beaucoup plus propre, avec tous les avantages liés à l'utilisation d'un chargeur, en utilisant le chargeur pour Lua.
Il existe également un référentiel collectant des extraits pour différentes langues, molleweide/LuaSnip-snippets.nvim
Vous avez deux choix principaux : utiliser des extraits de code SnipMate/VS (plus simple) ou écrire des extraits en Lua (plus complexe mais aussi plus riche en fonctionnalités). Voici quelques suggestions pour commencer dans les deux cas :
DOC.md
. Parmi ces deux-là, SnipMate est certainement le moyen le plus confortable d’écrire des extraits.config
: Notable : region_check_events
pour accéder à la fin des extraits dans lesquels le curseur n'est plus à l'intérieur, delete_check_events
pour nettoyer les extraits dont le texte a été supprimé et enable_autosnippets
pour activer l'expansion automatique des extraits.extras
: Ce module contient de nombreuses fonctions qui facilitent considérablement l'écriture d'extraits ; fmt
et lambda
sont particulièrement utiles.lua-loader
: Un moyen très utile de charger des extraits, plus confortable que d'appeler add_snippets
.functionNode
, dynamicNode
, choiceNode
et restoreNode
.Remarque : au lieu de lire immédiatement la documentation officielle, vous souhaiterez peut-être consulter la section Ressources pour les nouveaux utilisateurs ci-dessous, car la documentation est rédigée davantage comme un manuel de référence que comme un didacticiel pour les nouveaux utilisateurs.
DOC.md
est la documentation principale : il donne un aperçu de la façon d'écrire des extraits, explique le rôle et le cas d'utilisation de chaque nœud LuaSnip, montre comment charger des extraits à partir des formats Lua, VS Code et SnipMate, et couvre l'API LuaSnip disponible. .:help luasnip.txt
est une version en texte brut de DOC.md
disponible avec la fonctionnalité :help
de Neovim.Examples/snippets.lua
contient de nombreux exemples d'extraits écrits en Lua. Nous vous recommandons fortement de parcourir (ou mieux encore, :luafile
ing) ces exemples d'extraits avant d'utiliser les fonctionnalités avancées de LuaSnip.DOC.md
【中文版】DOC en chinois est ici.
Voici quelques vidéos et tutoriels LuaSnip sur le Web :
ls.add_snippets
au lieu de ls.snippets = {}
Inspiré par vsnip.vim