Ich benutze :r !uuidgen
häufig, um eine neue UUID in den Puffer einzufügen. Dies funktioniert, aber ich versuche im Allgemeinen, die UUID zwischen Anführungszeichen einzufügen und :r !uuidgen
die UUID in einer neuen Zeile zu drucken.
Um dieses Problem zu umgehen, verwende ich derzeit eine einfache Keymap:
nnoremap <C-u> mm:r!uuidgen<CR>dW"_dd`mp
Dieses Makro setzt die Markierung mm
, fügt die UUID ein r!uuidgen
, löscht die eingefügte UUID dW
, löscht die zusätzliche Zeile "_dd
, kehrt zur Markierung zurück und fügt BACKTICKm
schließlich die UUID ein p
.
Gibt es eine Möglichkeit, :r
direkt hinter dem Cursor zu stehen, ohne dass dieses Makro / diese Tastenkombination ein Register verschwendet?
Antworten:
Sie können das Ausdrucksregister verwenden
"=
undsystem()
:In einem Mapping im Einfügemodus würde es so aussehen:
oder mit einer Ausdruckszuordnung:
quelle
Im Einfügemodus können Sie drücken Ctrl-Rund dann Folgendes eingeben:
Beachten Sie, dass dadurch eine nachgestellte neue Zeile hinzugefügt wird, da dies die Ausgabe ist
uuidgen
. Um dies zu beheben, könnten wir verwenden:So entfernen Sie die neue Zeile.
Von
:help i_CTRL-R
:Um dies an Ctrl-uIhr Beispiel zu binden , können Sie Folgendes verwenden:
quelle
Noch eine mit
:python
:Sie könnten wie folgt zuordnen:
Die UUIDs werden vom Python-UUID-Modul generiert .
quelle
Dies ist möglicherweise weniger vorzuziehen als die Verwendung einer Pure-Vim-Lösung. Wenn Sie jedoch einen Snippet-Manager wie Ultisnips verwenden, können Sie versuchen , ein Snippet wie das folgende hinzuzufügen :
Auf diese Weise können Sie
uuid
Ihren Erweiterungsauslöser im Einfügemodus eingeben und drücken unduuid
werden durch die Ausgabe des entsprechenden Shell-Befehls ersetzt. Dies kann natürlich leicht für andere Befehle angepasst und auf leistungsstarke Weise erweitert werden, wie in den Ultisnips-Dokumenten beschrieben.quelle