Zum Beispiel, wenn ich vier Zeilen wie folgt habe:
die erste Zeile
die zweite Zeile
die dritte Zeile
die vierte Zeile
Ich möchte sie umkehren
die vierte Zeile
die dritte Zeile
die zweite Zeile
die erste Zeile
Wie könnte ich das in Vim machen?
vim
editing
text-editors
text-editing
Jichao
quelle
quelle
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1
vi.stackexchange.com/a/2107/10254Antworten:
Um alle Zeilen in einer Datei umzukehren,
Für eine Erklärung siehe
Das zeigt auch, wie man nur einen Bereich von Linien umkehrt.
quelle
ma
). 2. Bewegen Sie den Cursor in die erste Zeile des Blocks. 3. Geben Sie:'a,.g/^/m 'a
Wählen Sie die gewünschten Zeilen aus, drücken Sie
!
und leiten Sie in der daraufhin angezeigten Eingabeaufforderung die Zeilen durchtac
ein la:'<,'>!tac
. Sehen Sieman tac
für weitere Details.quelle
shift+v
mit den visuellen Linienmodusj
auf und fügen der Auswahl Linien hinzu.gvim
! Ansonsten musst du absolute Zeilennummern verwenden (vielleicht kannst du relative verwenden, aber du musst vorsichtig sein) mit dem:g/^/m0
(was auch sehr schwer zu merken ist) ... Also sollte tac im Grunde genommen mit vim sein, egal auf welcher Plattform du bist dran, ABER es ist nicht 100% Vimscript, ABER wen interessiert das: P:.,'a!tac
arbeite daher mit minimalem Aufwand.shift+v
können Sie}
mit zum nächsten Absatz gelangen oder den vertikalen Raum leeren. Auchman tac: concatenate and print files in reverse
.Unter Mac OS X
tac
gibt es keine, aber Sie könnentail -r
mit dem gleichen Effekt arbeiten:Dies funktioniert auch gut für den visuellen Modus:
Auszug aus
tail(1)
der Manpage von:quelle
alias tac='tail -r'
brew install coreutils
und verwendengtac
.Für diejenigen, die mit dem visuellen Modus
vertraut sind : 1. Identifizieren Sie die Zeilennummer über der Auswahl, die Sie spiegeln möchten
:set nu
.2.
Shift-V
um die Auswahl zu markieren, die Sie spiegeln möchten (visueller Modus).3.
:g/^/m <Line number from step 1>
.Beachten Sie, dass es im visuellen Modus automatisch angezeigt wird,
:'<,'>g/^/m <Line number>
wenn Sie den Befehl von 3 eingeben.Dieser Befehl verschiebt die Auswahl zeilenweise in die von Ihnen angegebene Zeilennummer. Wenn der zweite Eintrag in die angegebene Zeilennummer verschoben wird, wird der erste nach unten auf Zeilennummer + 1 verschoben. Der dritte drückt den ersten und den zweiten nach unten usw., bis die gesamte Liste in die einzelne Zeilennummer verschoben wurde Liste in umgekehrter Reihenfolge.
quelle
'<
anstelle der manuellen Eingabe der Zeilennummer verwenden. Starten Sie die Auswahl einfach eine Zeile früher und führen Sie sie aus:'<,'>g/^/m'<
.Ein Befehl
:Rev[erse]
und optionale Zuordnungen für Ihrevimrc
, damit Sie sich die nicht offensichtlichen Schritte dieses Rezepts nicht merken und ausführen müssen:( Zuordnungen
:xmap
für den visuellen, aber nicht den Auswahlmodus, wie:help mapmode-x
zum Zuordnen druckbarer Zeichen empfohlen.)(Basierend auf: http://tech.groups.yahoo.com/group/vim/message/34305 )
quelle
:'<,'>g/^/m'<
:):-1,+1Rev
was du suchst? Stellen Sie sicher, dass Sie den Bereich, den Sie umkehren möchten, visuell auswählen können, zV7j:Rev
. Wenn dies Ihre Frage nicht beantwortet, habe ich sie nicht verstanden, daher müssen Sie sie für mich ausarbeiten oder umformulieren.Angenommen, Sie befinden sich in Zeile 3, daher haben wir einen Bereich von 3 bis 6. Geben Sie einfach ein.
quelle
:,6g/^/m2
. oder wenn in dem letzten Zeile des Bereichs::3,g/^/m2
; und:3,6g/^/m2
funktioniert von überall in der Datei.