繁体   English   中英

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

[英]Vim - move rest of line to new line above

如何得到

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

// this is a comment
int lel = 123;

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

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

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

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

仍然不是一个非常漂亮的答案,但假设光标是“^”在上面的位置,另一个选项是:

d 0 = p u 输入

  • d0删除直到行的开头。
  • =对下一个议案的重新审视。
  • :pu short for :put
  • Enter以运行该命令。

我可能会用

DO<c-r>"

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

(以插入模式结束)

新答案:

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

弄清楚了。 这是我早期尝试之一,但是以<esc>d^o<esc>p ,其中存在插入的行获得评论领导者的问题。 <cu>解决了这个问题。

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

如果想要保持插入模式,这当然很有用。


早期答案:

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

建议的按键顺序:

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

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

这意味着<esc>进入正常模式, mp标记当前位置为pa进入插入模式, <cr>打破该行并将注释放在下一行正确的缩进处, <esc>进入正常模式, dd删除line, `p转到标记位置, P将删除的行放在当前行之前, `p转到标记位置, a转到Insert模式。 为避免将手指伸出,请将其映射:

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

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

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

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

<cr>打破行并将注释置于正确的缩进处, <esc>转到正常模式, dd删除行, k转到上一行, P将删除的行放在当前行之前, jA最后放在Insert中你开始时的模式。

要映射它:

 :inoremap <F2> <cr><esc>ddkPjA 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM