vim - 在Vim,整行上下移动

Vim中有没有类似的命令?

时间:

将以下内容放入你的.vimrc


noremap <c-s-up> :call feedkeys( line('.')==1 ? '' : 'ddkP' )<CR>
noremap <c-s-down> ddp

下面是可以在.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,具体取决于你想将它的上移或者下移多少行,IE +2将向下移动 2行,-3将向上移动 2行)

移动到特定行

:set number - 显示数字行( 更容易看到移动到的位置)

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

移动多行:

V ( 例如 。—— V转变) 并上下移动courser以在VIM中选择多行

一旦选定了:和运行上面的命令, m +1 等等

我这里可以工作:

http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file

在.vimrc中输入以下内容:


" For moving lines (^] is a special character; use <M-k> and <M-j> if it works)
nnoremap ^]k mz:m-2<CR>`z==
inoremap ^]j <Esc>:m+<CR>==gi
inoremap ^]k <Esc>:m-2<CR>==gi
vnoremap ^]j :m'>+<CR>gv=`<my`>mzgv`yo`z
nnoremap ^]j mz:m+<CR>`z==
vnoremap ^]k :m'<-2<CR>gv=`>my`<mzgv`yo`z

其中^]是表示ALT键的单个字符,要输入该字符,请在Vim中使用C v,esc(在Windows上为C q,esc)。

在命令模式下,将光标置于要向下移动的行上,然后,

 
ddp

 

在许多文档中,命令P和P有一些混淆,实际上p在光标之后粘贴,而P在光标处粘贴。

只需将此代码添加到.vimrc(或.gvimrc)


nnoremap <A-j> :m+<CR>==
nnoremap <A-k> :m-2<CR>==
inoremap <A-j> <Esc>:m+<CR>==gi
inoremap <A-k> <Esc>:m-2<CR>==gi
vnoremap <A-j> :m'>+<CR>gv=gv
vnoremap <A-k> :m-2<CR>gv=gv

这是MacVim的简化版本


" 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


" 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-Left/Right切换选项卡,所以我使用Cmd-Alt-Left/Right 。

这是MacVim的Tab切换(将.gvimrc和上面的其余内容一起放入):


:macm Window.Select Previous Tab key=<D-S-Left>
:macm Window.Select Next Tab key=<D-S-Right>

...