【发布时间】:2014-05-25 12:33:57
【问题描述】:
有时我想在 vim 中将当前行与 line up 或 line 交换。我可以使用命令:m+1 或:m-1 来做到这一点。不过也太啰嗦了。有没有更短的方法做同样的事情?
【问题讨论】:
有时我想在 vim 中将当前行与 line up 或 line 交换。我可以使用命令:m+1 或:m-1 来做到这一点。不过也太啰嗦了。有没有更短的方法做同样的事情?
【问题讨论】:
试一试:
ddp 和 ddkP
如果它给了你想要的。 ;)
【讨论】:
给映射一个机会:
nnoremap <leader>k :move-2<CR>==
nnoremap <leader>j :move+<CR>==
xnoremap <leader>k :move-2<CR>gv=gv
xnoremap <leader>j :move'>+<CR>gv=gv
【讨论】:
Tim Pope 的 unimpaired.vim - Pairs of handy bracket mappings 和我自己的 LineJuggler plugin 都提供(除其他外;我的插件专注于行移动和复制,而 Tim 的则混合了有用的东西)[e 和 ]e 映射来移动当前行/选择高于或低于。这些不会破坏默认寄存器,如ddp 等。会的。
【讨论】:
Vim 有 :move 命令,可以让你移动一行。
例如,:m +1 会将当前行向下移动。
我的.vimrc 中有这些映射:
" move the lines of visual mode up or down
" JK to move and keep a correct indentation (with =)
" <up><down> to move keeping the correct indentation
vnoremap <silent> J :m '>+1<cr>gv=gv
vnoremap <silent> <down> :m '>+1<cr>gv
vnoremap <silent> K :m '<-2<cr>gv=gv
vnoremap <silent> <up> :m '<-2<cr>gv
使用这些线条,如果您在可视模式下选择一堆线条,然后按<up> 或<down> 箭头,线条将向上或向下移动(您将保持在相同的视觉选择中,这要归功于gv 结尾)。
J 和K 几乎相同,但它们使用= 运算符保持和自动缩进(gv= 自动缩进最后一个视觉选择)。
当然,我鼓励您修改映射到您自己偏好的键。这些只是我的。此外,在不理解的情况下复制粘贴可能是一个坏主意。如果您了解该映射,您可以查看:m、gv 和= 的帮助页面。
【讨论】: