在Vim中上下移动整行
在Notepad ++中,我可以使用Ctrl + Shift +向上/向下来上下移动当前行。 Vim中有类似的命令吗? 我已经浏览了无尽的指南,但是一无所获。
如果没有,我该如何将操作绑定到该组合键上?
编辑:Mykola的答案适用于所有行,除了那些在缓冲区的开始和结束。 将第一行向上移动或向下移动删除行,当移动底行时,最初会跳出两个空格,就像一个棋子! 任何人都可以提供任何改进?
把下面的内容放到你的.vimrc中来完成这项工作
noremap <c-s-up> :call feedkeys( line('.')==1 ? '' : 'ddkP' )<CR>
noremap <c-s-down> 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 <silent> <c-s-up> :call <SID>swap_up()<CR>
noremap <silent> <c-s-down> :call <SID>swap_down()<CR>
如果我想用上面的代码换一行,我通常会执行以下操作
ddkP
说明
假设光标位于您想要移动的行上。
上下移动:m
移动
:m +1
- 向下移动1行
:m -2
- 向上移动1行
(请注意,您可以用任何数字替换+1,具体取决于您想要向上或向下移动多少行,即+2会将其向下移动2行,-3会将其向上移动2行)
转到特定的行
:set number
- 显示号码行(更容易看到你将它移动到哪里)
:m 3
- 在第三行之后移动该行(将3替换为您想要的任何行)
移动多行:
V
(即Shift-V)并上下移动选择器以在VIM中选择多行
一旦选中hit:并运行上面的命令, m +1
等
上一篇: Move entire line up and down in Vim
下一篇: Is there any way in the OS X Terminal to move the cursor word by word?