我有这个:
pick 887b66f add 222 Dziewiecsil to flowers new title
pick dc331cb new name of beginning commit
我希望得到这个:
pick dc331cb new name of beginning commit
pick 887b66f add 222 Dziewiecsil to flowers new title
有没有办法使用键盘快捷键快速完成此操作?
答案 0 :(得分:107)
要将当前行与下一行交换,请在命令模式下键入ddp
。
答案 1 :(得分:36)
dd
删除当前行,然后您可以使用p
粘贴删除的行。使用m
还有另一种方法。使用m
,您可以移动线条,即
:m 1
将在第1行之后移动当前行
:m 0
会将当前行移至顶部
:m $
会将当前行移至底部
在您的示例中,将光标放在第一行并键入:m $
答案 2 :(得分:3)
示例:
1. one
> 2. two
使用:m-2
,切换(当前行-2)
> 2. two
1. one
使用:m+1
开关(当前行+ 1)
1. one
> 2. two
您可以根据需要对此进行映射。
答案 3 :(得分:2)
尽管问题很老并且标记为已回答,但我想通过说您可以使用由Sven Marnach nnoremap
提供的普通模式命令来扩展答案。像这样:
:nnoremap <C-Up> <Up>ddp<Up>
:nnoremap <C-Down> ddp
这将允许您在文件中使用 Ctrl + Up 和 Ctrl + Down 移动线条。但是这会覆盖@"
寄存器,它会存储您上次复制的字符串/字/字母/等。因此,通过在dd
和p
命令之前添加&#34;(reg),我们可以解决此问题:
:nnoremap <C-Up> <Up>"add"ap<Up>
:nnoremap <C-Down> "add"ap
这里我们在删除和粘贴命令之前添加"a
以将我们的行存储在@a
寄存器中,因此您的默认复制寄存器不会被覆盖。但是它可能会覆盖@a
寄存器的内容(谁知道,但是您可以将它用于您的用例中的重要内容,但这一步有点偏执,如果您愿意,可以跳过它),让&#39;我也解决了这个问题:
:nnoremap <silent><C-Up> :let save_a=@a<Cr><Up>"add"ap<Up>:let @a=save_a<Cr>
:nnoremap <silent><C-Down> :let save_a=@a<Cr>"add"ap:let @a=save_a<Cr>
(<silent>
需要阻止我们的命令回显到底部的消息行。)
现在我们有两个映射,允许我们使用键盘快捷键在文件中移动行。您可以重新定义按钮,我使用 Alt + j / k ,对于那些<A-j>
和<A-k>
命令。但是并非所有终端仿真器都支持Alt键映射AFAIK。
答案 4 :(得分:0)
Vim wikia页中提出的映射实际上是映射组合键的最佳方法,这些组合键模仿Sublime和其他编辑器实现此功能的方式。
这包括在移动之后进行的缩进动作,这也很棒(如果您不希望这样做,则是双等于==
的符号)。
它还支持视觉和插入模式,因此您可以在编辑时或使用fulblock时移动行。
nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv
我个人将它们映射到Mac上的<D-J>
和<D-K>
,而不是<A-
映射到 Alt 键。这样,我就使用 Cmd + Shift + j / k ,这对我的指尖感觉更加自然。 >