如何阻止vim在从剪贴板粘贴时插入注释字符?

62

当我将下面这些行粘贴到Vim中时,

" OmniCppComplete
let OmniCpp_NamespaceSearch = 1

Vim会自动在所有行加上"注释字符。我该如何摆脱这个问题并粘贴原始内容?

What I'm getting after the paste in Vim:

 66     " OmniCppComplete
 67     " let OmniCpp_NamespaceSearch = 1
4个回答

106

两个主要选项:

  • 直接从寄存器中粘贴,无需进入插入模式,使用 "+p
    • " 表示“使用以下寄存器”;
    • + 指的是剪贴板,并且
    • p 用于粘贴!

如果您在Linux中使用中键选择粘贴,请使用*代替+

  • 在进入插入模式之前,运行:set paste进行粘贴。离开插入模式后,使用:set nopaste关闭它。

22
只有 :set paste 部分对我起作用(在通过SSH连接从Mac iTerm2运行的Ubuntu框中的Vim,因此可能在服务器端没有剪贴板)。 - Calimo
4
我完全不理解"+p的意思,但是:set paste的方法非常完美。 - Jake
@Jake 如果你的意思是 "+p 不起作用,那可能是因为你像 Calimo 一样处于无法让 Vim 看到剪贴板的情况。如果你的意思是你真的不明白,那么在正常模式下,你可以直接键入 "+p - Cascabel
1
@Jake 不,我是真的指的是字面意义上的三个按键。在前两个按键之后,你应该可以在状态行中看到"+,然后p就能够粘贴了。如果没有任何反应,那是因为vim无法访问你的操作系统剪贴板。 - Cascabel
1
我并不是 Vim 专家,你可以看出来。很可能,就像你所说,我的剪贴板没有显示出来。感谢你的帮助。另一种方法非常好用。我仍然需要学习更多。Vim 是一个非常强大的工具。 - Jake
显示剩余6条评论

33

进入Vim编辑器的模式,输入命令:set paste,然后按下Ctrl + Shift + V即可进行粘贴操作。

这样可以确保粘贴的内容正确无误。

请勿使用编辑和粘贴功能,此方法不可行。


3
我正在从 Mac ssh 到远程的 Ubuntu。它可以工作,但我需要在两个命令之间进入“插入模式”。 - Paschalis
2
在使用 Ctrl + Shift + V 之前,你不应该按下 i 进入插入模式吗? - Peter Mortensen

14

目前为止,所有人都没抓住重点。当您开始新行时(无论是粘贴还是键入),Vim会自动插入注释字段。

您设置了formatoptions,至少设置了 r 选项,可能还设置了 o 选项。要查看您的设置,请键入

:set formatoptions?

要删除这些选项,请输入

:set formatoptions=
Paste会按照您的期望工作。 键入
:help fo-table

查看formatoptions中每个字母的含义。


1
这应该是被接受的答案。在使用“:set formatoptions-=ro”命令删除“ro”后,formatoptions显示为“formatoptions=croql”,我可以将文本从一个Putty会话粘贴到vi编辑模式中。谢谢。 - carl verbiest

0

当您在Vim的UI上工作时,请转到菜单 Terminal 重置和清除。然后尝试粘贴您所拥有的代码。

它将按原样粘贴。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接