Ich habe zwei Spalten:VIM: swap zwei Spalten durch Leerzeichen getrennt
cats dog
dog cats
Ich möchte die beiden Spalten tauschen:
dog cats
cats dog
vim verwenden, wie ich dies tun würde?
Ich habe zwei Spalten:VIM: swap zwei Spalten durch Leerzeichen getrennt
cats dog
dog cats
Ich möchte die beiden Spalten tauschen:
dog cats
cats dog
vim verwenden, wie ich dies tun würde?
Meine erste Idee, eine Substitution, am Ende der Suche zu viel wie Birei ist so ging ich mit AWK (dass ich nicht sehr viel wissen) als Filter verwendet:
:%!awk '{print $2, $1}'
Sie können es mit einem regulären Ausdruck erreichen mit \S
für Nicht-Leer und \s
für Zuschnitte, wie:
:%s/\v^(\S+)\s+(\S+).*$/\2 \1/
Es ergibt:
dog cats
cats dog
Falls jemand anderes muss die erste Spalte tauschen die letzte zu sein, wenn es mehr als zwei Spalten: (Hunde Frettchen Katzen -> Katzen Frettchen Hunde) ':% s/\ v^(\ S +) \ s + (\ S +) (. *) $/\ 2 \ 3 \ \ 1/' – sventechie
Wenn die Spalten die gesamte Datei übernehmen Verwenden Sie diese:
:%normal "adt xA <CTRL-v><CTRL-r>a
Wenn es nur ein sectio ist n der Datei, machen eine visuelle Auswahl Endanwendung dieses:
:'<,'>normal "adt xA <CTRL-v><CTRL-r>a
Erläuterung:
%
oder '<,'>
: Führen Sie den folgenden Befehl auf die gesamte Datei (%
) oder in einem bestimmten Abschnitt ('<,'>
);"adt
: Löscht alles bis zum ersten Leerzeichen (Leerzeichen nicht enthalten) und speichert den gelöschten Text im Register a
.x
: löscht das nachgestellte Leerzeichen;A
: beginnt Text anzufügen;<CTRL-v><CTRL-R>a
: Eingabe des Befehls <CTRL-r>
(es wird ^R
angezeigt), der den Inhalt des Registers a
einfügt.Sie können archivieren dies in diesem einfachen Weg, alle caracters in der ersten und zweiten Spalte
:%s/\(.\+\)\(\s\+\)\(.\+\)/\3\2\1/g
folgende Makro kann verwendet werden:
qaqqadf A <esc>[email protected]
qaq
löscht das Register a.qa
Aufnahme Makro in Register a starten.df
bis der RaumA
append nach dem Ende der Zeile löschen und ein Raum<esc>p
in den normalen Modus und Paste gehen geben.j0
Gehe zur ersten Spalte in der nächsten Zeile.q
Stop Makro einJa, es ist so etwas wie ein swap two columns Vim-Plugin.
111 222 333 444 555 333 222 111 444 555
111 222 333 444 555 333 222 111 444 555
111 222 333 444 555 → 333 222 111 444 555
111 222 333 444 555 333 222 111 444 555
111 222 333 444 555 333 222 111 444 555
Darf ich fragen, warum der Downvote? – romainl
Ihre Lösung funktioniert, ich weiß nicht, warum jemand abgelehnt – c4f4t0r
@ c4f4t0r, yeah ... 1. Es funktioniert. 2. Es ist kürzer als eine Substitution. 3. Es ist sehr "vimm-y" und "unix-y", da es ein anderes spezialisiertes Programm als Filter verwendet ... Was auch immer. – romainl