在Notepad ++中,我可以使用Ctrl+ Shift+ Up/ Down来上下移动当前行.在Vim中有类似的命令吗?我看过无尽的向导,却一无所获.
如果没有,我怎么能将动作绑定到该组合键?
编辑:Mykola的答案适用于所有行,除了缓冲区的开头和结尾处.向上移动第一行或向下移动底线会删除该行,当向下移动底线时,它最初会跳转两个空格,就像一个棋子!任何人都可以提供任何改进吗?
如果我想用上面一行交换一行,我通常会执行以下操作
ddkP
说明
dd将删除该行并将其添加到默认寄存器.
k将向上移动一条线(j将向下移动一条线)
P将粘贴在当前行之上
假设光标位于您想要移动的线上.
上下:m
移动:
移动
:m +1
- 向下移动1行
:m -2
- 向上移动1行
(注意你可以用任何数字替换+1,具体取决于你想要向上或向下移动多少行,即+2将它向下移动2行,-3将它向上移动2行)
移动到特定的行
:set number
- 显示数字行(更容易看到你移动到的地方)
:m 3
- 在第3行之后移动线(将3替换为您想要的任何线)
移动多行:
V
(即Shift- V)并上下移动courser以在VIM中选择多行
一旦选中命中:并运行上面的命令m +1
等
将以下内容放在.vimrc中以完成工作
noremap:call feedkeys( line('.')==1 ? '' : 'ddkP' ) noremap ddp
消失的线看起来像Vim bug.我放了一个黑客来避免它.可能有一些更准确的解决方案.
更新
使用Vim组合有很多无法解释的困难.这些是线缺失和额外的线跳跃.
所以这里是脚本解决方案,可以放在.vimrc或〜/ .vim/plugin/swap_lines.vim中
function! s:swap_lines(n1, n2) let line1 = getline(a:n1) let line2 = getline(a:n2) call setline(a:n1, line2) call setline(a:n2, line1) endfunction function! s:swap_up() let n = line('.') if n == 1 return endif call s:swap_lines(n, n - 1) exec n - 1 endfunction function! s:swap_down() let n = line('.') if n == line('$') return endif call s:swap_lines(n, n + 1) exec n + 1 endfunction noremap:call swap_up() noremap :call swap_down()
移动一行: ddkP
向下移动一行: ddp
这对我有用:
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; useand if it works) nnoremap ^]k mz:m-2 `z== inoremap ^]j :m+ ==gi inoremap ^]k :m-2 ==gi vnoremap ^]j :m'>+ gv=` mzgv`yo`z nnoremap ^]j mz:m+ `z== vnoremap ^]k :m'<-2 gv=`>my` 其中^]是表示ALT键的单个字符.要输入该字符,请C+v, Esc在Vim中使用(C+q, Esc在Windows上).
6> 小智..:在命令模式下,将光标定位在要向下移动的行上,然后
ddp说明:dd删除当前行到常规缓冲区p将其放回光标位置后,或者在整行的情况下,将其放在下面一行.
关于许多文档中的命令p和P存在一些混淆.实际上p贴在AFTER光标和P AT光标上.
7> 小智..:将以下内容添加到〜/ .vimrc文件中(确保没有n,m的映射)
nmap n :m +1nmap m :m -2 现在按下
n
键会向下移动一条线并向上m
移动一条线.
8> alexkv..:只需将此代码添加到.vimrc(或.gvimrc)
nnoremap:m+ == nnoremap :m-2 == inoremap :m+ ==gi inoremap :m-2 ==gi vnoremap :m'>+ gv=gv vnoremap :m-2 gv=gv
9> timoxley..:正是你在这个很棒的插件中寻找的东西:https://github.com/vim-scripts/upAndDown
10> 小智..:一个简单的解决方案就是放入
.vimrc
以下行:nmap:m-2 nmap :m+1