在notepad++中,我可以使用Ctrl + Shift + Up / Down来上下移动当前行。在Vim中有类似的命令吗?我翻遍了无数的指南,但一无所获。
如果没有,我如何将动作绑定到该键组合?
编辑:Mykola的答案适用于所有行,除了缓冲区的开头和结尾。向上移动第一行或向下移动一行会删除该行,当向上移动一行时,它最初会跳跃两个空格,就像棋子一样!谁能提供一些改进吗?
在notepad++中,我可以使用Ctrl + Shift + Up / Down来上下移动当前行。在Vim中有类似的命令吗?我翻遍了无数的指南,但一无所获。
如果没有,我如何将动作绑定到该键组合?
编辑:Mykola的答案适用于所有行,除了缓冲区的开头和结尾。向上移动第一行或向下移动一行会删除该行,当向上移动一行时,它最初会跳跃两个空格,就像棋子一样!谁能提供一些改进吗?
当前回答
以下是MacVim的简化版本,使用了Wikia文章中的例子(参见gun的评论链接)。
" Move selection up/down (add =gv to reindent after move)
:vmap <D-S-Up> :m-2<CR>gv
:vmap <D-S-Down> :m'>+<CR>gv
我只使用块选择变量,因为它所需要的是Shift-V来选择当前行,并可选地向上/向下游标来选择更多的行。
根据上面的快捷方式,按Cmd-Shift-Up/Down将移动块的选择向上/向下。“D”是命令键在MacVim, Windows尝试“C”(控制),或“A”(Alt)(例如。<C-A-f>将是Control Alt f)。
Wikia文章添加了“=gv”,它可以根据周围的文本在移动后调整块的缩进。这是令人困惑的,所以我删除了它,并添加快捷方式快速缩进选择代替。
" Indent selection left/right (Cmd Shift Left/Right is used for Tab switching)
:vmap <D-A-Left> <gv
:vmap <D-A-Right> >gv
注意,<<和>>也可以做到同样的事情,但选择会丢失,所以上面的这些快捷键允许多次缩进,仍然可以移动块,因为选择是保持的。
我的MacVim配置为用cmd - shift -左/右切换选项卡,所以我使用了cmd - alt -左/右。
下面是MacVim的Tab切换(把.gvimrc和上面的其他内容放在一起):
:macm Window.Select\ Previous\ Tab key=<D-S-Left>
:macm Window.Select\ Next\ Tab key=<D-S-Right>
其他回答
在命令模式下,将光标定位在要向下移动的行上,然后
ddp
解释: Dd将当前行删除到常规缓冲区 p将它放回游标位置之后,如果是整行,则放回下一行。
在许多文档中,关于命令p和p有一些混淆。 实际上p粘贴AFTER游标,p粘贴AT游标。
正是你在这些插件中寻找的:
https://github.com/vim-scripts/upAndDown https://github.com/matze/vim-move
当你在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的行下面。
向上移动一行:ddkP
向下移动一行:ddp
对我来说,是ddkkp(而不是用大写P的ddkP,这也可以)。