So kopiere ich normalerweise einen Text- oder Codeblock:
- Wählen Sie den Block mit Visual mode ( V) und löschen Sie ihn mit d; oder wenn es nur eine einzelne Zeile ist, verwenden Sie einfach dd.
- Gehe dorthin , wo ich den Text haben möchte, ich bin zu dumm, um mich an den Unterschied zwischen pund zu erinnern P, also bekomme ich das ungefähr 50% der Zeit hin. (Wenn ich es falsch verstehe: mache einen Versuch noch einmal rückgängig).
- Manchmal muss der Einzug angepasst werden, also gehe ich erneut in den visuellen Modus Vund wähle denselben Block erneut aus und verwende >oder <, um dies zu beheben.
Gibt es einen einfacheren Weg? In einigen Editoren habe ich gesehen, dass Sie einen Textblock sozusagen "aufgreifen" und verschieben können. Hier ist ein Beispiel von Emacs (aber ich habe es auch in anderen Editoren gesehen):
Oder gibt es vielleicht einen anderen (noch besseren) Weg?
cut-copy-paste
visual-mode
Martin Tournoij
quelle
quelle
]p
oder[p
anstattp
oder einfügenP
. Auf diese Weise wird der Block, den Sie einfügen, automatisch eingerückt.Antworten:
Dafür gibt es ein Plugin: dragvisuals.vim .
Standardmäßig werden keine Schlüssel gebunden, das müssen Sie also selbst tun. Ich ordne sie gerne Control+ zu Arrow key:
Es kommt auch mit einem Bonusschlüssel zum Duplizieren der aktuellen Auswahl:
Vorteile dieses Plugins gegenüber den anderen Antworten:
Ein weiterer nützlicher Trick, um dies zu ergänzen, sind die folgenden Tastenkombinationen:
Dadurch wird die letzte visuelle Auswahl nach der Verwendung >im visuellen Modus erneut ausgewählt, sodass Sie die Ausrichtung einfacher anpassen können (Sie können auch die Pfeiltasten verwenden, dies verschiebt sie jedoch um ein Zeichen und nicht um ein Zeichen
shiftwidth
).quelle
Für Schritt 3 können Sie
gv=
stattdessen verwenden (=
bedeutet Einzug undgv
bedeutet "Letzte visuelle Auswahl erneut auswählen").Für das Emacs-Verhalten wäre es ziemlich einfach, einige Zuordnungen in Ihrer .vimrc-Datei hinzuzufügen:
Sie können dann die Aufwärts- und Abwärtspfeiltasten verwenden, um sich in einer visuellen Linienauswahl zu bewegen. (Natürlich können Sie auch verschiedene Tasten zuordnen, wenn Sie Pfeile hassen.)
(Sie können dies mit einer normalen visuellen Auswahl tun und sie auch nach links und rechts verschieben:
vnoremap <left> dhPgvhoho
undvnoremap <right> dpgvlolo
.)quelle
gv
Geht zur letzten visuellen Auswahl, die in diesem Fall der Absatz wäre, der gelöscht wurde. Was vermisse ich?Sie können einige Tasten neu zuordnen, um Linien zu verschieben. Zum Beispiel Pfeile nach oben und unten, wenn Sie es gewohnt sind, sich durch zu bewegen
hjkl
.ZB auf .vimrc
:m
, normaler Befehl zum Verschieben einer Linie+1
oder-2
um eine Linie nach oben oder unten zu kennzeichnen (-1 hält die Linie an der gleichen Stelle)gv
um denselben Text imVISUAL
Modus erneut auszuwählenDiese Lösung greift nicht in die Register ein, sodass kopierter Text weiterhin verfügbar ist. Außerdem wird der Code neu formatiert, um den richtigen Einzug festzulegen.
quelle
=
(es ändert sich oft zu sehr die Formatierung ohne Bezug für mich).Der einfachste Weg, dies zu tun, ist hier dokumentiert: http://vimrcfu.com/snippet/77
Fügen Sie Folgendes in Ihre .vimrc ein
quelle
Es gibt nur wenige Plugins dafür, aber ich bevorzuge Tim Popes unbeeinträchtigten ( Github ) (Ingo Karkat LineJuggler ist ähnlich).
Sie wählen Ihren Textblock visuell aus und verschieben ihn dann
]e
(zum Austauschen) nach unten ([e
in die andere Richtung). Verwenden Sie.
, um die Aktion zu wiederholen (Sie haben repeat.vim installiert, nicht wahr? ). Wenn Sie zu weit gehen, machen Sie einfach über rückgängigu
.Nun persönlich denke ich,
p
und esP
sind so allgemeine Befehle, dass es am besten ist, sie zu lernen, bevor schlechte Gewohnheiten geschaffen werden. Dann könnten Sie verwenden]p
, um am gleichen Einzug einzufügen. Wenn Sie>p
ungestört arbeiten, können Sie einen Einrückungsgrad tiefer einfügen oder ihn=p
einfügen und neu formatieren.Wenn Sie Probleme beim Erinnern haben
p
undP
dann könnte es Ihnen helfen , sie in Bezug auf die denken ,o
undO
Befehle , die eine Art Symmetrie ist.Wie andere angemerkt haben, können Sie
gv
mit eine visuelle Auswahl erneut auswählen. Wenn Sie jedoch nur Text einfügen / einfügen, haben Sie Ihre visuelle Auswahl verloren. Ärgern Sie sich nicht , weil jede Änderung (und yanks!) Gesetzt'[
und']
um den geänderten Bereich. So können Sie über>']
(Lesen:.
Nach rechts verschieben bis zum Ende der letzten Änderung) einrücken und mit den Pfeiltasten den Einzug wiederholen, bis Sie den Text an der richtigen Stelle haben.Weitere Hilfe finden Sie unter:
quelle
Wenn Sie die Zeilennummer kennen, in die Sie den Textblock verschieben möchten, können Sie mit dem
:move
Befehl einen Bereich oder eine visuelle Auswahl verwenden , um den Block dorthin zu verschieben.Zum Beispiel, wenn ich die folgende Datei habe:
und ich möchte die Linie von a's nach der Linie von c's verschieben, ich setze den Cursor auf die Linie von a's und gebe ein
:m3
, und die Linie wird dann verschoben.Dies funktioniert auch mit +/- Offsets. Im obigen Beispiel könnte das gleiche Ergebnis erzielt werden, wenn
:m+2
die Zeile 2 nach unten verschoben wird.Bei Textblöcken besteht der einzige Unterschied darin, einen Bereich oder eine Auswahl hinzuzufügen. Um die Zeilen aaa und bbb an das Ende der Datei zu verschieben, verwenden Sie einen Befehl wie
:1,2m$
($ = letzte Zeile) oder wählen Sie die Zeilen und visuell aus:m$
.quelle
:move
Sie unter vim.wikia.com/wiki/Moving_lines_up_or_down oder im Tipp 29 Duplizieren oder Verschieben von Zeilen mit den Befehlen ': t' und ': m' im Buch Practical Vim von D. Neil.Plugin vim-move von matze
Verfügbar ab
Standardzuordnungen im visuellen und normalen Modus:
quelle