在 Notepad 中,我可以使用 Ctrl/来上下移动当前行。Vim中是否有类似的命令?我浏览了无尽的指南,但一无所获。Shift``Up``Down
Ctrl
Shift``Up``Down
如果没有,我如何将操作绑定到该组合键?
编辑:Mykola 的答案适用于所有行,除了缓冲区开头和结尾的那些。将第一行向上或底线向下移动会删除该线,而当将底线向上移动时,它最初会跳过两个空格,就像一个棋子!任何人都可以提供任何改进吗?
将以下内容放入您的 .vimrc 以完成工作
noremap <c-s-up> :call feedkeys( line('.')==1 ? '' : 'ddkP' )<CR> noremap <c-s-down> ddp
该行的消失看起来像一个 Vim 错误。我放了一个技巧来避免它。可能有一些更准确的解决方案。
更新
仅使用 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>