在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

说明

  • dd将删除该行并将其添加到默认寄存器。
  • k将向上移动一条线(j将向下移动一条线)
  • P将粘贴在当前行的上方

  • 假设光标位于您想要移动的行上。

    上下移动:m移动

    :m +1 - 向下移动1行

    :m -2 - 向上移动1行

    (请注意,您可以用任何数字替换+1,具体取决于您想要向上或向下移动多少行,即+2会将其向下移动2行,-3会将其向上移动2行)

    转到特定的行

    :set number - 显示号码行(更容易看到你将它移动到哪里)

    :m 3 - 在第三行之后移动该行(将3替换为您想要的任何行)

    移动多行:

    V (即Shift-V)并上下移动选择器以在VIM中选择多行

    一旦选中hit:并运行上面的命令, m +1

    链接地址: http://www.djcxy.com/p/8681.html

    上一篇: Move entire line up and down in Vim

    下一篇: Is there any way in the OS X Terminal to move the cursor word by word?