在notepad++中,我可以使用Ctrl + Shift + Up / Down来上下移动当前行。在Vim中有类似的命令吗?我翻遍了无数的指南,但一无所获。

如果没有,我如何将动作绑定到该键组合?

编辑:Mykola的答案适用于所有行,除了缓冲区的开头和结尾。向上移动第一行或向下移动一行会删除该行,当向上移动一行时,它最初会跳跃两个空格,就像棋子一样!谁能提供一些改进吗?


当前回答

这是一个在我的机器上工作的解决方案 :运行VIM 8.1的MacBook Pro

这些命令不会删除缓冲区顶部或底部的行。

使用Alt-J和Alt-K输出的实际符号是一种变通方法,因为它们的键代码在我的环境中映射不正确。

把这个放在旧的.vimrc中,看看是否适合你。

" Maps Alt-J and Alt-K to macros for moving lines up and down
" Works for modes: Normal, Insert and Visual
nnoremap ∆ :m .+1<CR>==
nnoremap ˚ :m .-2<CR>==
inoremap ∆ <Esc>:m .+1<CR>==gi
inoremap ˚ <Esc>:m .-2<CR>==gi
vnoremap ∆ :m '>+1<CR>gv=gv
vnoremap ˚ :m '<-2<CR>gv=gv

其他回答

这是一个在我的机器上工作的解决方案 :运行VIM 8.1的MacBook Pro

这些命令不会删除缓冲区顶部或底部的行。

使用Alt-J和Alt-K输出的实际符号是一种变通方法,因为它们的键代码在我的环境中映射不正确。

把这个放在旧的.vimrc中,看看是否适合你。

" Maps Alt-J and Alt-K to macros for moving lines up and down
" Works for modes: Normal, Insert and Visual
nnoremap ∆ :m .+1<CR>==
nnoremap ˚ :m .-2<CR>==
inoremap ∆ <Esc>:m .+1<CR>==gi
inoremap ˚ <Esc>:m .-2<CR>==gi
vnoremap ∆ :m '>+1<CR>gv=gv
vnoremap ˚ :m '<-2<CR>gv=gv

向上移动一行:ddkP

向下移动一行:ddp

你的光标可以在任何一行上。行号被打开以方便地识别行位置。 第一种情况:假设我在第7行,想把第3行移到第9行,把它移到下一页。

:3m 9完成移动。

第二种情况:我仍然在第7行,但现在我想移动第9行到第3行,把它带到页面上。

:9m 2完成移动。注意,目的地使用2而不是3。

注意:光标会移动到移动目标位置。如果我需要返回第7行,只需使用:7

第三种情况:移动一系列的行。比如,从9到12,第九行到第三行

:9,12米2完成移动。 图片:一个终端游戏围栏与Vim打开移动实验

以下是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>

正是你在这些插件中寻找的:

https://github.com/vim-scripts/upAndDown https://github.com/matze/vim-move