Angesichts einer Reihe von Zeilen, die ähnlich aussehen:
2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar.
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct.
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr.
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun.
Gibt es eine Möglichkeit, diese ersten vier Zeichen (das Jahr) zu erfassen und an das Ende der Zeile zu kopieren, sodass es so aussieht:
2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar. 2001
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct. 2002
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr. 2003
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun. 2004
cut-copy-paste
replace
repeated-commands
mischen
quelle
quelle
:%g/^\d\{4}\d\@!/s/^\(\d\{4}\).*\zs/ \1/
.Antworten:
ist eine Möglichkeit, es zu tun
\v
magische Option, um nicht der Gruppierung entkommen zu müssen()
^
Zeilenanfang\d{4}
stimmen genau mit vier Ziffern überein.*
Rest der Linie\1
\2
hat das passende Muster in()
edit: @Jair Lopez erwähnt in Kommentaren, der reguläre Ausdruck kann weiter verbessert werden:
oder das Äquivalent
&
und\0
enthält das gesamte übereinstimmende MusterWeitere Informationen finden Sie in den häufig gestellten Fragen zu Vimregex und Regex
quelle
:%s/\v^(\d{4}).*/& \1/
wäre ein kürzerer Befehl.Und eine Lösung mit einem Makro:
Was bedeutet:
Sie können das Makro dann so oft wiedergeben, wie Sie möchten
3@a
.Bearbeiten Wie @evilsoup in den Kommentaren erwähnt hat, können Sie das Makro effektiver in allen Zeilen des Puffers ausführen:
Sie können natürlich
%
durch einen Bereich ersetzen , der die zu ändernden Linien beschreibt.quelle
:%normal @q
So würde ich es machen:
Erläuterung:
quelle
Wenn Sie Zugriff auf Standard-UNIX-Befehle haben, können Sie Folgendes verwenden
AWK
:quelle
:help filter
es sich um eine integrierte Vim-Funktion handelt, und wenn man bedenkt, wie gut diese Funktion es Vim ermöglicht, sich in das UNIX-Paradigma einzufügen, würde ich sagen, dass es tatsächlich sehr vi / vim ist.Ich denke, dass die vorhandenen Mechanismen dafür besser sind, aber es ist auch möglich, dies im visuellen Blockmodus zu tun .
Kopieren Sie die Daten:
Füllen Sie das Ende der ersten Zeile auf:
Einfügen:
quelle
4l
anstelle vonllll
Über eine Unix-Befehlszeile (oder Windows, wenn Sie Unix-Befehlszeilentools installiert haben)
quelle