In Vim habe ich folgenden Text:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
Ich möchte am Ende jeder Zeile "," hinzufügen. Der vorherige Text wird wie folgt aussehen:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
Weiß jemand, wie man das macht? Ist es möglich, den visuellen Blockmodus zu verwenden, um dies zu erreichen?
Antworten:
Dies wird es für jede Zeile in der Datei tun:
Wenn Sie anstelle der gesamten Datei eine Teilmenge von Zeilen erstellen möchten, können Sie diese anstelle von angeben
%
.Eine Möglichkeit besteht darin, eine visuelle Auswahl vorzunehmen und dann die einzugeben
:
. Es wird:'<,'>
für Sie ausgefüllt, dann geben Sie den Rest ein (Beachten Sie, dass Sie nur hinzufügen müssens/$/,/
)quelle
'
, sollte sein:'<,'>s/$/,/
.g
? (:'<,'>s/$/,/g
)/$/
sowieso nur einmal übereinstimmt.Es gibt tatsächlich eine Möglichkeit, dies im visuellen Blockmodus zu tun. Durch
$A
einfaches Drücken im visuellen Blockmodus wird das Ende aller Zeilen in der Auswahl angehängt. Der angehängte Text wird in allen Zeilen angezeigt, sobald Sie drücken Esc.Das ist also eine mögliche Lösung:
Das heißt, im normalen Modus wählt Visual einen Absatz aus
vip
, wechselt in den visuellen Blockmodus CTRLV, hängt an alle Zeilen$A
ein Komma an,
und drückt dann Esczur Bestätigung.Die Dokumentation ist bei
:h v_b_A
. Im Beispielabschnitt finden Sie sogar eine Illustration, wie es funktioniert ::h v_b_A_example
.quelle
C-V
) aus, bewegen Sie den Cursor an das Zeilenende$
und hängen Sie sie an alle anA
. Du wirst lieben:h v_b_A
, was wirklich gründlich ist.<C-V>ip
anstelle von verwendenvip<C-V>
.'virtualedit'
- das habe ich getestet.) Ich bestätige, dass es in einem sauberen Vim nicht funktioniert. Danke für den Hinweis!Eine andere Lösung mit einer weiteren großartigen Funktion:
Siehe
:help :normal
.quelle
:normal
. Ich fand es informativ!Ex-Modus ist am einfachsten:
quelle
Der Ersatzbefehl kann auf eine visuelle Auswahl angewendet werden. Erstellen Sie einen visuellen Block über den Zeilen, die Sie ändern möchten, und geben Sie ein. Beachten Sie dabei :, dass die Befehlszeile wie folgt initialisiert wird :
:'<,'>
. Dies bedeutet, dass der Ersatzbefehl die visuelle Auswahl wie folgt bearbeitet:Und dies ist eine Ersetzung, die für Ihr Beispiel funktionieren sollte, vorausgesetzt, Sie möchten wirklich das Komma am Ende jeder Zeile, wie Sie erwähnt haben. Wenn nachgestellte Leerzeichen vorhanden sind, müssen Sie den Befehl möglicherweise entsprechend anpassen:
Dadurch wird eine beliebige Anzahl von Leerzeichen vor dem Zeilenende durch ein Komma ersetzt, wodurch nachfolgende Leerzeichen effektiv entfernt werden.
Dieselben Befehle können in einer Reihe von Zeilen ausgeführt werden, z. B. für die nächsten 5 Zeilen:
:,+5s/$/,/
oder für den gesamten Puffer ::%s/$/,/
.quelle
Wenn Sie am Ende der Zeilen, die mit 'key' beginnen, ',' hinzufügen möchten, verwenden Sie:
quelle
:g/key/s/$/,
. Siehe:help :global
.Ich habe
<M-DOWN>
(Alt-Abwärtspfeil) zugeordnet,<DOWN>.
damit ich den letzten Befehl in einer Reihe von Zeilen sehr schnell wiederholen kann. Mit diesem Mapping kann ich:Halten Sie dann die Alt-Taste gedrückt, während Sie wiederholt nach unten drücken, um das Komma an das Ende jeder Zeile anzuhängen.
Dies funktioniert gut für mich, da es eine sehr gute Kontrolle darüber ermöglicht, welche Zeilen die Änderung bewirken und welche nicht.
(Ich habe auch die anderen Pfeile ähnlich zugeordnet, um ein einfaches Wiederholen zu ermöglichen
.
)Hier ist die Zuordnungszeile, die Sie in Ihr vimrc einfügen können:
quelle
$ entspricht dem Zeilenende
quelle
$
nicht nur zur Linie beitragen,
./g
wird verwendet, um die Ersetzung bei jedem Auftreten in einer Zeile durchzuführen. Da es nur einen$
in einer Zeile gibt, können Sie ihn sicher fallen lassen.Das folgende Makro kann auch verwendet werden, um Ihre Aufgabe zu erfüllen.
quelle