Angenommen, ich habe eine Zeile in einer Datei mit XXXX
einem Platzhalter, den ich v
wie folgt ausgewählt habe:
XXXX Some other text
Wie kann ich nur die XXXX
mit der Ausgabe eines externen Befehls ändern , wie z date +%Y%m%d
.
Ich bin so weit gekommen
:'<,'>!date +\%Y\%m\%d
aber das ersetzte die ganze Linie.
external-command
replace
muk.li.
quelle
quelle
Antworten:
Sie können den Text löschen und die Ausgabe eines Befehls einfügen, indem Sie CtrlR- =:
Für den Ausdruck können Sie die
system()
Funktion verwenden, um externe Befehle auszuführen.Nach der Auswahl des Textes, drücken
c
, dann<c-r>=
und Verwendungsystem('date +%Y%m%d')
als Ausdruck.quelle
date
. Wenn Sie so etwas versuchensystem('printf %s foo')
, bei dem keine nachfolgende Zeilenumbruch ausgegeben wird, werden Sie feststellen, dass es einen Unterschied gibt.strftime
Funktion, die Sie anstelle von verwenden könnensystem('date …')
. Die Formatzeichenfolge ist dieselbe."=system('date +%Y%m%d')p
stattdessen die visuelle Auswahl verwenden.Wenn Sie den Cursor auf eine solche Zeile setzen, können Sie:
0
um den Cursor in die erste Spalte zu setzen.f
Space um den Cursor in das erste Leerzeichen zu setzen.i
Enter Esc die Linie teilen.l
um den Cursor eine Zeile nach oben zu bewegen.:.!date +\%Y\%m\%d
um den Befehl auszuführen.J
um die Linien wieder zu verbinden.Von
:h :visual_example
:Siehe auch
:h visual-operators
für Details.Aus diesem Kommentar: Sie können auch versuchen , die vis oder NrrwRgn Plugin. Beide sollten gut damit umgehen. (Danke @ christian-brabandt für den Tipp).
quelle
Erstellen Sie eine temporäre Zuordnung für solche Ersetzungen. Zum Beispiel:
Im visuellen Modus können Sie dann Text auswählen, eingeben
qq
und dieser wird durch die Befehlsausgabe ersetzt. In diesem Beispielwc -c
wird Ihre Auswahl verarbeitet, die der@"
Parameter ist.perl -pe chomp
wird benötigt, um einen nachgestellten Zeilenumbruch aus der Ausgabe zu entfernen.quelle
Versuche dies:
date
Befehls in Register a gespeichert, wobei die abschließende neue Zeile entfernt wird.XXXX
(g/XXXX/
) undXXXX
durch den Inhalt von Register a (s/XXXX/\=@a/g
)Siehe
:h let-@
und:h :global
sowie den Abschnitt "Unterliste" in:h list-index
quelle
Plugin: Visual Block Commands (vis) von DrChip
Installation
vis.vba.gz
und Abhängigkeitcecutil.vba.gz
in vim8 packpathOP Beispiel wird
quelle