在notepad++中,我可以使用Ctrl + Shift + Up / Down来上下移动当前行。在Vim中有类似的命令吗?我翻遍了无数的指南,但一无所获。
如果没有,我如何将动作绑定到该键组合?
编辑:Mykola的答案适用于所有行,除了缓冲区的开头和结尾。向上移动第一行或向下移动一行会删除该行,当向上移动一行时,它最初会跳跃两个空格,就像棋子一样!谁能提供一些改进吗?
在notepad++中,我可以使用Ctrl + Shift + Up / Down来上下移动当前行。在Vim中有类似的命令吗?我翻遍了无数的指南,但一无所获。
如果没有,我如何将动作绑定到该键组合?
编辑:Mykola的答案适用于所有行,除了缓冲区的开头和结尾。向上移动第一行或向下移动一行会删除该行,当向上移动一行时,它最初会跳跃两个空格,就像棋子一样!谁能提供一些改进吗?
当前回答
当你在vim中点击命令:help move时,结果如下:
(范围):m[爱]{地址 } *: m * *:莫* *:* * E134 *移动 移动[range]给出的线到线的下方 由{address}给出。
例:移动当前行一行=>:m+1。
例:将数字为100的线移到数字为80的线下面=>:100 m 80。
例:将数字为100的线移到数字为200的线下面=>:100 m 200。
例如:将数字在[100,120]以内的行移动到数字为200 =>:100,120 m 200的行下面。
其他回答
当你在vim中点击命令:help move时,结果如下:
(范围):m[爱]{地址 } *: m * *:莫* *:* * E134 *移动 移动[range]给出的线到线的下方 由{address}给出。
例:移动当前行一行=>:m+1。
例:将数字为100的线移到数字为80的线下面=>:100 m 80。
例:将数字为100的线移到数字为200的线下面=>:100 m 200。
例如:将数字在[100,120]以内的行移动到数字为200 =>:100,120 m 200的行下面。
这招对我很管用:
http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file
顺便说一句,如果你想使用ALT+some_key,而你的终端(urxvt这样做)拒绝遵守,你应该在你的.vimrc中输入如下内容:
" 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
其中^]是代表ALT键的单个字符。 要输入该字符,在Vim中使用C+v, Esc(在Windows中使用C+q, Esc)。
对我来说,是ddkkp(而不是用大写P的ddkP,这也可以)。
Vim插件未受损。Vim [e]e
最简单的方法和vscode一样。将下面的行添加到.vimrc
"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>