Neovim >= 0.7 (extmarks) jsregexp
für lsp-snippet-transformations
(einige Tipps zur Installation finden Sie hier).
Mit Ihrem bevorzugten Plugin-Manager, z. B. vim-plug, Packer oder lazy
Packer :
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 "
})
faul :
{
" 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)
Im Abschnitt Releases
auf der rechten Seite finden Sie die neueste Hauptversion.
LuaSnip verwendet semantische Versionierung (mit etwas Spielraum könnten große Patches als Nebenversion enden)!
Veröffentlichungen werden als vMajor.Minor.Patch
gekennzeichnet. Wir empfehlen, sich an der neuesten Hauptversion zu orientieren.
Sehen Sie sich die Veröffentlichungen des Repositorys an, damit Sie benachrichtigt werden, wenn eine neue Version verfügbar wird.
Notiz
Unter Windows müssen Sie eine Shell verwenden, die Unix-Befehle ausführen kann (MinGW, MSYS2 usw.). Glücklicherweise bietet Git eine sh.exe
an, sodass Sie keine umfangreiche MSYS2-Umgebung installieren müssen. Außer Git benötigen Sie auch einen C-Compiler und make
, um jsregexp
zu installieren. Möglicherweise müssen Sie auch den Build-Befehl ändern: 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
Im Vim-Skript mit <Tab>
zum Vorwärtsspringen/Erweitern eines Snippets, <Shift-Tab>
zum Zurückspringen und <Ctrl-E>
zum Ändern der aktuellen Auswahl in einem 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> '
... oder in Lua, mit einem anderen Tastensatz: <Ctrl-K>
zum Erweitern, <Ctrl-L>
zum Vorwärtsspringen, <Ctrl-J>
zum Rückwärtsspringen und <Ctrl-E>
zum Ändern des Aktiven Auswahl.
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 })
Das Wiki von nvim-cmp
enthält auch ein Beispiel für die Einrichtung einer Super-Tab-ähnlichen Zuordnung.
Schauen Sie sich das Dokument an, um eine allgemeine Erklärung der Lader und ihrer Vorteile zu erhalten. Die folgende Liste dient nur als kurzer Überblick.
VS-Code-ähnlich : Um vorhandene Snippets im VS-Code-Stil eines Plugins (z. B. rafamadriz/Friendly-Snippets) zu verwenden, installieren Sie einfach das Plugin und fügen Sie es dann hinzu
require ( " luasnip.loaders.from_vscode " ). lazy_load ()
irgendwo in Ihrer Neovim-Konfiguration. LuaSnip lädt dann beim Start die im Plugin enthaltenen Snippets. Sie können auch ganz einfach Ihre eigenen benutzerdefinierten Snippets im VSCode-Stil laden, indem Sie den Pfad zum benutzerdefinierten Snippet-Verzeichnis an die Ladefunktion übergeben:
-- load snippets from path/of/your/nvim/config/my-cool-snippets
require ( " luasnip.loaders.from_vscode " ). lazy_load ({ paths = { " ./my-cool-snippets " } })
Weitere Informationen zum VS-Code-Loader finden Sie in den Beispielen oder in der Dokumentation.
SnipMate-like : Sehr ähnlich zu VS Code-Paketen; Installieren Sie ein Plugin, das Snippets bereitstellt, und rufen Sie die load
-Funktion auf:
require ( " luasnip.loaders.from_snipmate " ). lazy_load ()
Das SnipMate-Format ist sehr einfach, sodass das Hinzufügen benutzerdefinierter Snippets nur wenige Schritte erfordert:
init.vim
(oder einem anderen Ort in Ihrem runtimepath
) ein Verzeichnis mit dem Namen snippets
hinzu.<filetype>.snippets
und fügen Sie darin Snippets für den angegebenen Dateityp hinzu (sehen Sie sich zur Inspiration honza/vim-snippets an). # comment
snippet <trigger> <description>
<snippet-body>
snippet if C-style if
if ( $1 )
$0
Auch hier gibt es einige Beispiele und Dokumentation.
Lua : Fügen Sie die Snippets hinzu, indem Sie require("luasnip").add_snippets(filetype, snippets)
aufrufen. Ein Beispiel hierfür finden Sie hier.
Dies kann auch viel sauberer erfolgen, mit allen Vorteilen, die die Verwendung eines Laders mit sich bringt, indem der Lader für Lua verwendet wird
Es gibt auch ein Repository, das Snippets für verschiedene Sprachen sammelt, molleweide/LuaSnip-snippets.nvim
Sie haben im Wesentlichen zwei Möglichkeiten: Verwenden Sie SnipMate/VS-Code-Snippets (einfacher) oder schreiben Sie Snippets in Lua (komplexer, aber auch funktionsreicher). Hier sind einige Vorschläge für den Einstieg in beiden Fällen:
DOC.md
Von diesen beiden ist SnipMate definitiv die komfortablere Art, Snippets zu schreiben.config
: Bemerkenswert: region_check_events
zum Springen an das Ende von Snippets, in denen sich der Cursor nicht mehr befindet, delete_check_events
zum Bereinigen von Snippets, deren Text gelöscht wurde, und enable_autosnippets
zum Aktivieren der automatischen Snippet-Erweiterung.extras
: Dieses Modul enthält viele Funktionen, die das Schreiben von Snippets deutlich erleichtern; fmt
und lambda
sind besonders nützlich.lua-loader
: Eine sehr nützliche Möglichkeit, Snippets zu laden, komfortabler als der Aufruf add_snippets
.functionNode
, dynamicNode
, choiceNode
und restoreNode
.Hinweis: Anstatt sofort die offizielle Dokumentation zu lesen, sollten Sie sich vielleicht den Abschnitt „Ressourcen für neue Benutzer“ unten ansehen, da die Dokumente eher als Referenzhandbuch denn als Tutorial für neue Benutzer geschrieben sind.
DOC.md
ist die Hauptdokumentation – sie gibt einen Überblick über das Schreiben von Snippets, erklärt die Rolle und den Anwendungsfall jedes LuaSnip-Knotens, zeigt, wie Snippets aus den Formaten Lua, VS Code und SnipMate geladen werden, und deckt die verfügbare LuaSnip-API ab .:help luasnip.txt
ist eine Nur-Text-Version von DOC.md
die mit der :help
-Funktion von Neovim verfügbar ist.Examples/snippets.lua
enthält viele in Lua geschriebene Beispielschnipsel. Wir empfehlen dringend, diese Beispielschnipsel durchzusehen (oder noch besser: :luafile
zu verwenden), bevor Sie die erweiterten Funktionen von LuaSnip verwenden.DOC.md
dokumentiert.【中文版】DOC auf Chinesisch ist hier.
Hier sind einige LuaSnip-Videos und Tutorials im Web:
ls.add_snippets
hinzugefügt, statt mit ls.snippets = {}
Inspiriert von vsnip.vim