在vim中,很多时候我想完全删除一行,因此我使用dd。但是,然后我需要将该行粘贴到行中的其他位置,但是这会在粘贴之前插入换行符,因此,这对我很难获得所需的结果。
例如,

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}


当我用上面的代码执行此操作时,我得到:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}


,它与我想要的结果相差很远...我如何抑制这种换行行为,或使用另一种非常有效的方法?我认为d $不好,因为我不仅必须转到行首,而且如果我也想删除空行,我也需要在另一个寄存器中删除它,我觉得应该有一个更简单的方法!谢谢。

评论

除换行符外,是否可以删除整行?

它不是重复的,就像我说的那样,我想要一种更有效的方法然后转到行首,我实际上也想删除带有换行符的完整行....不仅仅是行的内容

哦,我明白您的意思了。对我来说,你要完成的目标还不是很清楚。

0D删除行(换行符除外)。并比gJ加入路线。现在,您可以放置​​不带换行符和空行的文本。

#1 楼

您可以在要删除的行上方的行中的任意位置,然后按JD并将其粘贴到p的所需位置。



J合并这两行,并在要删除的文本的开头移动您。这将删除换行符和要移动的行的缩进。

D从当前光标位置删除到行尾,但保留换行符。

提示:如果您用:pu删除或用D拖了,并且要粘贴新行,则可以使用y$

#2 楼

并不是很简单,但是效率略高,您还可以为这两个序列创建法线模式映射:


摇晃:转到要移动的行,然后
^ D“ _dd

粘贴:转到要替换的单词,然后
viwp



#3 楼

使用imap可以实现一些很好的工作。将以下内容添加到您的vimrc中:

inoremap <c-a> <c-r>1<esc>k$Jxi


这将为CTRL-a创建一个映射,该映射将粘贴最后一个删除的文本(带有dd或类似的文本)。如果愿意,您当然可以使用其他键进行映射。

参考文献:

:h i_CTRL-R
:h quote1
:h J


#4 楼

这对我也有点问题,以前从未考虑过对其进行优化,但是此映射有效:

nmap dil ^d$


dil是“在线删除”,类似于diwdi"

#5 楼

粘贴不带换行

将此内容放入您的.vimrc文件:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx


示例:

<span style="color:">danger</span>


现在您可以在正常模式下当光标位于gp时在#D51B3F后面输入color:插入:

不用换行就可以换行

使用flukus的答案:

" Delete current line without yanking the line breaks
nnoremap dil ^d$


,作为删除内线的缩写。这也消除了前导缩进。

#6 楼

您可以按v选择要复制的文本,然后按y将其带入缓冲区,然后按p将其粘贴到任何地方。它不会插入任何新行。

评论


是的,但这仍然是空白。

–muru
15年7月21日在7:08