我有这个:
pick 887b66f add 222 Dziewiecsil to flowers new title
pick dc331cb new name of beginning commit
Run Code Online (Sandbox Code Playgroud)
我希望得到这个:
pick dc331cb new name of beginning commit
pick 887b66f add 222 Dziewiecsil to flowers new title
Run Code Online (Sandbox Code Playgroud)
有没有办法使用键盘快捷键快速完成此操作?
Sve*_*ach 125
要将当前行与下一行交换,请ddp在命令模式下键入.
小智 41
dd删除当前行,然后您可以使用粘贴删除的行p.虽然使用了另一种方式m.随着m你可以移动线路即
:m 1 将在第1行之后移动当前行
:m 0 将当前行移至顶部
:m $ 将当前行移至底部
在您的示例中,将光标放在第一行并键入 :m $
更多信息:http://vim.wikia.com/wiki/Moving_lines_up_or_down
小智 12
尽管这个问题很老并且被标记为已回答,但我想通过说您可以使用正常模式命令来扩展答案,这些命令由Sven Marnach提供,nnoremap如下所示:
:nnoremap <C-Up> <Up>ddp<Up>
:nnoremap <C-Down> ddp
Run Code Online (Sandbox Code Playgroud)
这将允许您在文件中移动带有Ctrl+Up和Ctrl+ 的行Down。但是,这将覆盖@"寄存器,它存储您上次复制的字符串/单词/字母/等。因此,通过在dd和p命令之前添加“(reg),我们可以解决这个问题:
:nnoremap <C-Up> <Up>"add"ap<Up>
:nnoremap <C-Down> "add"ap
Run Code Online (Sandbox Code Playgroud)
这里我们"a在删除和粘贴命令之前添加将我们的行存储在@a寄存器中,因此您的默认复制寄存器不会被覆盖。但是它可能会覆盖@a寄存器的内容(谁知道,但是您可能会将它用于用例中的重要内容,但是这一步有点偏执,如果您愿意,可以跳过它),让我们也解决这个问题:
: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>
Run Code Online (Sandbox Code Playgroud)
(<silent>需要防止将我们的命令回显到底部的消息行。)
现在我们有两个映射,它们允许我们使用键盘快捷键在文件中移动行。您可以重新定义按钮,我使用Alt+ j/ k,这将是<A-j>和<A-k>用于这些命令。然而,并非所有终端模拟器都支持 Alt 键映射 AFAIK。
小智 8
例子:
1. one
> 2. two
Run Code Online (Sandbox Code Playgroud)
与:m-2, 开关(当前行 - 2)
> 2. two
1. one
Run Code Online (Sandbox Code Playgroud)
带:m+1开关(当前行 + 1)
1. one
> 2. two
Run Code Online (Sandbox Code Playgroud)
如果你愿意,你可以映射这个。
Vim wikia页面中提出的映射实际上是模拟 Sublime 和其他编辑器实现此功能的方式的映射按键组合的最佳方式。
这包括移动后的缩进操作,这也很棒(这是双等号==,以防您不想要)。
它还支持视觉和插入模式,以便您可以在编辑时或使用完整块移动线条。
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
Run Code Online (Sandbox Code Playgroud)
我亲自将它们映射到<D-J>我<D-K>的 Mac 上,而不是<A-映射到Alt按键。这样我使用Cmd+ Shift+ j/ k,这对我的指尖来说感觉更自然。