Vim - 将剩下的线移到上面的新线

时间:2015-08-04 10:40:04

标签: vim

如何从

获得
int lel = 123; // this is a comment
               ^

// this is a comment
int lel = 123;

最好是在插入模式下开始,并使用正确的缩进?

我目前的做法是C-c l d$ O C-c p,但由于我的自动缩进不完美,插入的行根本没有缩进。

我认为有些编辑使用space+enter或者其他东西(至少我我已经看过了)。

默认情况下这是否可以在vim中使用?

3 个答案:

答案 0 :(得分:3)

仍然不是一个非常漂亮的答案,但假设光标位于" ^"如上所述,另一种选择是:

d 0 = P û 输入

  • d0删除直到行的开头。
  • =对下一个动议表示欢迎。
  • :pu :put
  • 的缩写
  • Enter运行命令。

答案 1 :(得分:3)

我可能会用

DO<c-r>"

D删除到行尾。 O在插入模式下打开上面的行(使用正确的缩进)。 <c-r>"将使用D删除的部分粘贴。

(以插入模式结束)

答案 2 :(得分:2)

新答案:

d^o<c-u><esc>p

想出来。这是我的早期尝试之一,但是以<esc>d^o<esc>p的形式,其中存在插入的行获得评论领导者的问题。 <c-u>解决了这个问题。

d^o<c-u><c-o>p
如果想要保持插入模式,

当然很有用。

<小时/> 早期回答:

此解决方案有效,但Randy Morris的答案更好。

建议的密钥序列:

<esc>mpa<cr><esc>dd`pP`pa

(其中p可以替换为任何其他标记。)

这意味着<esc>进入正常模式,mp将当前位置标记为pa进入插入模式,<cr>中断行并发表评论在正确缩进的下一行,<esc>转到正常模式,dd删除行,`p转到标记位置,P将删除的行放在当前行,`p转到标记位置,a转到插入模式。为避免将手指伸出,请将其映射:

:inoremap <F2> <esc>mpa<cr><esc>dd`pP`pa

如果评论位于增加或减少缩进的行的末尾,则缩进将不正确。

更简单的序列,不适用于缓冲区的最后一行

要在不是缓冲区中最后一行的行上执行此操作,以下操作将执行此操作。将光标放在第一个斜杠上,在插入模式下:<cr><esc>ddkPjA

<cr>会中断该行并将评论置于正确的缩进位置,<esc>转到普通模式,dd删除行,k转到上一行,{ {1}}将删除的行放在当前行P之前,以最初处于启动时的插入模式。

要映射它:

jA