在notepad++中,我可以使用Ctrl + Shift + Up / Down来上下移动当前行。在Vim中有类似的命令吗?我翻遍了无数的指南,但一无所获。
如果没有,我如何将动作绑定到该键组合?
编辑:Mykola的答案适用于所有行,除了缓冲区的开头和结尾。向上移动第一行或向下移动一行会删除该行,当向上移动一行时,它最初会跳跃两个空格,就像棋子一样!谁能提供一些改进吗?
在notepad++中,我可以使用Ctrl + Shift + Up / Down来上下移动当前行。在Vim中有类似的命令吗?我翻遍了无数的指南,但一无所获。
如果没有,我如何将动作绑定到该键组合?
编辑:Mykola的答案适用于所有行,除了缓冲区的开头和结尾。向上移动第一行或向下移动一行会删除该行,当向上移动一行时,它最初会跳跃两个空格,就像棋子一样!谁能提供一些改进吗?
当前回答
你的光标可以在任何一行上。行号被打开以方便地识别行位置。 第一种情况:假设我在第7行,想把第3行移到第9行,把它移到下一页。
:3m 9完成移动。
第二种情况:我仍然在第7行,但现在我想移动第9行到第3行,把它带到页面上。
:9m 2完成移动。注意,目的地使用2而不是3。
注意:光标会移动到移动目标位置。如果我需要返回第7行,只需使用:7
第三种情况:移动一系列的行。比如,从9到12,第九行到第三行
:9,12米2完成移动。 图片:一个终端游戏围栏与Vim打开移动实验
其他回答
向上移动一行:ddkP
向下移动一行:ddp
以下是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>
假设光标在您想要移动的行上。
上下移动: :m表示移动
:m +1 -向下移动一行
:m -2 -向上移动1行
(注意,你可以用任何数字替换+1,这取决于你想要向上或向下移动多少行,即+2将向下移动2行,-3将向上移动2行)
移动到特定的线上
:set number -显示数字线(更容易看到你移动到哪里)
:m 3 -在第三行之后移动行(将3替换为任何你想要的行)
移动多行:
V(即Shift-V),并上下移动courser在VIM中选择多条行
一旦选中,点击:并运行上面的命令,m +1等
正是你在这些插件中寻找的:
https://github.com/vim-scripts/upAndDown https://github.com/matze/vim-move
在命令模式下,将光标定位在要向下移动的行上,然后
ddp
解释: Dd将当前行删除到常规缓冲区 p将它放回游标位置之后,如果是整行,则放回下一行。
在许多文档中,关于命令p和p有一些混淆。 实际上p粘贴AFTER游标,p粘贴AT游标。