删除Vim然后粘贴而不换行


11

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

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

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

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

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



1
它不是一个重复,因为我说我要那么更有效的方式去行的开始,也是我其实想删除以换行符的完整产品线....不只是行的内容
fYre

哦,我明白您的意思了。对我来说,这不是很清楚,你想完成什么。
EvergreenTree

1
0D删除除换行符以外的行。而且比gJ加入行。现在,您可以放置​​不带换行符和空行的文本。
Alex Kroll 2015年

Answers:


9

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

  • J连接两行,将您移到您要删除的文本的开头。这将删除换行符和要移动的行的缩进。
  • D 从当前光标位置删除到行尾,但保留换行符。

提示:您可以使用:pu,如果你删除D或猛拉y$,并要粘贴新线。


3

并非真正简单,但效率略高,您还可以为这两个序列创建普通模式映射:

  • 扬声:转到要移动的行,然后 ^D"_dd
  • 粘贴:转到您要替换的单词,然后 viwp

2

您可以通过达成一些很好的效果imap。将以下内容添加到您的vimrc

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

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

参考文献:

:h i_CTRL-R
:h quote1
:h J

1

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

nmap dil ^d$

dil是“看齐删除”,类似diwdi"等等。


1

粘贴没有换行

将其放在您的.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#D51B3Fcolor:我的光标位于: “普通”模式,。

不用新行就取消

使用flukus的答案:

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

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


0

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


是的,但这仍然是空白。
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.