In Notepad ++ kann ich Ctrl+ Shift+ Up/ verwenden Down, um die aktuelle Zeile nach oben und unten zu verschieben. Gibt es einen ähnlichen Befehl wie in Vim? Ich habe endlose Führer durchgesehen, aber nichts gefunden.
Wenn nicht, wie kann ich die Aktion an diese Tastenkombination binden?
Bearbeiten: Die Antwort von Mykola funktioniert für alle Zeilen, außer für die am Anfang und Ende des Puffers. Wenn Sie die erste Zeile nach oben oder unten verschieben, wird die Zeile gelöscht, und wenn Sie die untere Zeile nach oben verschieben, werden zunächst zwei Felder wie bei einem Bauern übersprungen! Kann jemand irgendwelche Verfeinerungen anbieten?
Antworten:
Stellen Sie Folgendes in Ihre .vimrc-Datei, um die Aufgabe zu erledigen
Das Verschwinden der Linie sieht aus wie ein Vim-Bug. Ich habe einen Hack gemacht, um das zu vermeiden. Wahrscheinlich gibt es eine genauere Lösung.
Aktualisieren
Es gibt viele ungeklärte Schwierigkeiten, nur Vim-Kombinationen zu verwenden. Dies sind fehlende Linien und zusätzliches Linienspringen.
Hier ist also die Skriptlösung, die entweder in .vimrc oder ~ / .vim / plugin / swap_lines.vim platziert werden kann
quelle
<A-up>
wie in Eclipse verwendet.ddkP
in der letzten Zeile des Dokuments. Probieren Sie es selbst in einer 3-zeiligen Datei aus. Um solche Probleme zu vermeiden, verwenden Sie lieber die viel einfacheren:m
Zuordnungen, die im Vim-Wiki angegeben sind .<A-up>
und<A-down>
aber wenn ich versuche , diese Schlüssel in vim in visuellen Lauf in tmux die Auswahl verschwindet und der Cursor bewegt sich in einer Reihe aufstellen; ohne die ausgewählten Linien zu verschieben.Wenn ich eine Zeile mit der obigen Zeile tauschen möchte, gehe ich normalerweise wie folgt vor
Erläuterung
quelle
ddp
um eine Zeile nach unten zu verschieben (Zeile löschen und unter die aktuelle Zeile4 dd
und bewegen Sie sich dann zu 2 Zeilen,:2
wo Sie und einfügen möchtenP
.4dd
statt sein4 dd
?dd<number>jp
um die aktuelle Zeile <Nummer> +1 der Zeilen nach unten zu verschieben. Unddd<number>kp
um die aktuelle Zeile <Anzahl> der Zeilen nach oben zu verschieben.Angenommen, der Cursor befindet sich auf der Linie, die Sie bewegen möchten.
Auf und ab
:m
bewegen : zum Bewegen:m +1
- bewegt sich 1 Zeile nach unten:m -2
- 1 Zeile nach oben bewegen(Beachten Sie, dass Sie +1 durch beliebige Zahlen ersetzen können, je nachdem, wie viele Zeilen Sie nach oben oder unten verschieben möchten, dh +2 würde es um 2 Zeilen nach unten verschieben, -3 würde es um 2 Zeilen nach oben verschieben.)
Zu einer bestimmten Zeile wechseln
:set number
- Zahlenzeilen anzeigen (leichter zu erkennen, wohin Sie sie verschieben):m 3
- Verschieben Sie die Zeile nach der 3. Zeile (ersetzen Sie 3 durch eine beliebige Zeile)Mehrere Zeilen verschieben:
V
(dh Shift- V) und bewegen Sie den Courser nach oben und unten, um mehrere Zeilen in VIM auszuwählenEinmal ausgewählt, drücken Sie :die obigen Befehle
m +1
usw.quelle
noremap <c-s-up> :m -2<CR> noremap <c-s-down> :m +1<CR>
Verschieben Sie eine Zeile nach oben:
ddkP
Bewegen Sie eine Zeile nach unten:
ddp
quelle
.
wiederholen möchten .Das hat bei mir funktioniert:
http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file
Übrigens, wenn Sie ALT + some_key verwenden möchten und Ihr Terminal (urxvt tut dies) die Einhaltung verweigert, sollten Sie Folgendes in Ihre .vimrc eingeben:
Dabei ist ^] ein einzelnes Zeichen , das die ALT-Taste darstellt. Verwenden Sie zur Eingabe dieses Zeichens C+v, EscVim ( C+q, Escunter Windows).
quelle
[niv]noremap
sind Remaps für normale | Einfüge | visuelle Modi.<CR>
istCarriage Return
(Enter
Schlüssel).Fügen Sie der Datei ~ / .vimrc Folgendes hinzu (stellen Sie sicher, dass Sie keine Zuordnung für n, m haben).
Durch Drücken der
n
Taste wird eine Linie nach unten undm
eine Linie nach oben verschoben.quelle
Positionieren Sie im Befehlsmodus den Cursor auf der Zeile, die Sie nach unten bewegen möchten, und dann
Erläuterung: dd löscht die aktuelle Zeile in den allgemeinen Puffer. P setzt sie NACH der Cursorposition oder bei ganzen Zeilen eine Zeile darunter zurück.
In vielen Dokumenten gibt es einige Verwirrung hinsichtlich der Befehle p und P. In Wirklichkeit fügt p AFTER cursor und P AT cursor ein.
quelle
Fügen Sie diesen Code einfach zu .vimrc (oder .gvimrc) hinzu.
quelle
Genau das, wonach Sie in diesem fantastischen Plugin suchen : https://github.com/vim-scripts/upAndDown
quelle
Eine einfache Lösung besteht darin, folgende
.vimrc
Zeilen einzugeben:quelle
Ich habe Folgendes am Ende meiner .vimrc-Datei eingefügt:
Jetzt bewegen 'H' und 'N' die aktuelle Linie nach oben bzw. unten.
quelle
Hier ist eine vereinfachte Version für MacVim unter Verwendung der Wikia-Artikelbeispiele (siehe Link aus dem Kommentar der Waffe ).
Ich verwende nur die Blockauswahlvariante, da nur Umschalt-V erforderlich ist, um die aktuelle Zeile auszuwählen, und optional Cursor nach oben / unten, um weitere Zeilen auszuwählen.
Gemäß den obigen Verknüpfungen wird durch Drücken von Cmd-Shift-Up / Down die Blockauswahl nach oben / unten verschoben. "D" ist die Befehlstaste in MacVim, für Windows versuchen Sie "C" (Steuerelement) oder "A" (Alt) (z. B. <CAf> wäre Steuerelement Alt f).
Der Wikia-Artikel fügt diesen "= gv" hinzu, wodurch die Einrückung des Blocks nach dem Verschieben basierend auf dem umgebenden Text angepasst wird. Das ist verwirrend, deshalb habe ich es entfernt und stattdessen Verknüpfungen hinzugefügt, um die Auswahl schnell einzurücken.
Beachten Sie, dass dies auch mit << und >> möglich ist, die Auswahl jedoch verloren geht. Mit diesen Verknüpfungen können Sie den Block mehrmals einrücken und den Block trotzdem verschieben, da die Auswahl beibehalten wird.
Mein MacVim ist so konfiguriert, dass Tabs mit Cmd-Shift-Left / Right gewechselt werden, also habe ich Cmd-Alt-Left / Right verwendet.
Hier ist die Tab-Umschaltung für MacVim (geben Sie .gvimrc mit dem Rest oben ein):
quelle
vim plugin unimpaired.vim [e und] e
quelle
Wenn Sie den Befehl
:help move
eingebenvim
, ist hier das Ergebnis::[range]m[ove] {address} *:m* *:mo* *:move* *E134* Move the lines given by [range] to below the line given by {address}.
Beispiel: Verschieben Sie die aktuelle Zeile um eine Zeile nach unten =>
:m+1
.Beispiel: Verschieben Sie die Zeile mit der Nummer 100 unter die Zeile mit der Nummer 80 =>
:100 m 80
.Beispiel: Verschieben Sie die Zeile mit der Nummer 100 unter die Zeile mit der Nummer 200 =>
:100 m 200
.Beispiel: Verschieben Sie Zeilen mit der Nummer innerhalb von [100, 120] unter die Zeile mit der Nummer 200 =>
:100,120 m 200
.quelle
Hier ist eine Lösung, die auf meinem Computer funktioniert : MacBook Pro mit VIM 8.1
Diese Befehle löschen Ihre Zeilen am oberen oder unteren Rand Ihres Puffers nicht.
Die Verwendung der tatsächlichen Symbole, die Alt-J und Alt-K ausgeben, ist eine Problemumgehung für ihre Schlüsselcodes, die in meiner Umgebung nicht richtig zugeordnet sind.
Werfen Sie dies in die alte .vimrc und sehen Sie, ob es für Sie funktioniert.
quelle
Für mich
ddkkp
tat es (anstattddkP
mit einem Großbuchstaben P, das auch funktionieren würde).quelle
: m. + 1 oder: m.-2 würde ausreichen, wenn Sie eine einzelne Linie verschieben. Hier ist mein Skript zum Verschieben mehrerer Zeilen. Im visuellen Modus werden die Zeilen mit der visuellen Auswahl durch Alt-Auf / Alt-Ab um eine Zeile nach oben / unten verschoben. Im Einfügemodus oder im normalen Modus verschiebt Alt-Up / Alt-Down die aktuelle Zeile, wenn kein Zählpräfix angegeben ist. Wenn es ein Zählpräfix gibt, verschiebt Alt-up / Alt-down so viele Zeilen, beginnend mit der aktuellen Zeile, um eine Zeile nach oben / unten.
quelle
Wenn Sie dies in mehreren Zeilen tun möchten, die einer bestimmten Suche entsprechen:
:g/Your query/ normal ddp
oder:g/Your query/ m -1
:g/Your query/ normal ddp
oder:g/Your query/ m +1
quelle