433 Stimmen

Ganze Zeile in Vim nach oben und unten verschieben

In Notepad++ kann ich Folgendes verwenden Ctrl + Shift + Up / Down um die aktuelle Zeile nach oben oder unten zu verschieben. Gibt es einen ähnlichen Befehl wie diesen in Vim? Ich habe endlose Anleitungen durchgesehen, aber nichts gefunden.

Wenn das nicht der Fall ist, wie kann ich die Aktion an diese Tastenkombination binden?

Edit: Mykolas Antwort funktioniert für alle Zeilen, außer für die am Anfang und Ende des Puffers. Wenn man die erste Zeile nach oben oder die unterste Zeile nach unten verschiebt, wird die Zeile gelöscht, und wenn man die unterste Zeile nach oben verschiebt, springt sie zunächst um zwei Leerzeichen, wie ein Bauer! Kann jemand Verbesserungsvorschläge machen?

16voto

emil.p.stanchev Punkte 662

Das hat bei mir funktioniert:

http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file

BTW, wenn Sie ALT+irgendeine_Taste benutzen wollen und Ihr Terminal (urxvt macht das) sich weigert, sollten Sie etwas wie das folgende in Ihre .vimrc eingeben:

" For moving lines (^] is a special character; use <M-k> and <M-j> if it works)
nnoremap ^]k mz:m-2<CR>`z==
inoremap ^]j <Esc>:m+<CR>==gi
inoremap ^]k <Esc>:m-2<CR>==gi
vnoremap ^]j :m'>+<CR>gv=`<my`>mzgv`yo`z
nnoremap ^]j mz:m+<CR>`z==
vnoremap ^]k :m'<-2<CR>gv=`>my`<mzgv`yo`z

wobei ^] für ein einzelnes Zeichen die die ALT-Taste darstellt. Um dieses Zeichen einzugeben, verwenden Sie C+v, Esc in Vim ( C+q, Esc unter Windows).

14voto

alexkv Punkte 5074

Fügen Sie einfach diesen Code zu .vimrc (oder .gvimrc) hinzu

nnoremap <A-j> :m+<CR>==
nnoremap <A-k> :m-2<CR>==
inoremap <A-j> <Esc>:m+<CR>==gi
inoremap <A-k> <Esc>:m-2<CR>==gi
vnoremap <A-j> :m'>+<CR>gv=gv
vnoremap <A-k> :m-2<CR>gv=gv

12voto

szg Punkte 121

Positionieren Sie den Cursor im Befehlsmodus auf die Zeile, die Sie nach unten verschieben möchten, und wählen Sie

ddp

Erläuterung: dd löscht die Datei c

T

10voto

Bishal Udash Punkte 62

Der einfachste Weg ist der gleiche wie Vscode. Fügen Sie folgende Zeile zu .vimrc hinzu

"Ctrl+Shift+up move line above"
nmap <C-S-Up> :m -2<CR>

"Ctrl+Shift+down move line below
nmap <C-S-Down> :m +1<CR>

7voto

A einfache Lösung ist das Einsetzen Ihrer .vimrc diese Zeilen:

nmap <C-UP> :m-2<CR>  
nmap <C-DOWN> :m+1<CR>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X