我没有大量使用VI的经验。我在 Mac OSX 上运行它。
我之前在编辑器中使用复制和粘贴文本(当我在下面说 gui 时,我指的是 Mac OSX gui)
command C
使用或 gui 或yy
VI 中的命令突出显示和复制 i 的光标。- 进入我要粘贴文本的插入模式,然后使用
command V
或 gui粘贴
我的问题是,当通过任何方法复制和粘贴时,在终端中分成多行的很长的行变成多行,如终端所示。
我如何让它按原样复制和粘贴?
你有
:set paste
将 Vim 置于粘贴模式。如果您想从一个窗口剪切或复制一些文本并将其粘贴到 Vim 中,这将非常有用。这将避免意外的影响。在终端中使用 Vim 时,设置此选项很有用,因为 Vim 无法区分键入的文本和粘贴的文本。
假设您的 vi 实际上是vim,在粘贴之前,请执行以下操作:
:set paste
这将禁用自动换行和自动缩进以及所有修改键入文本的类似内容。粘贴后,再次将其关闭
:set nopaste
原因是虽然gvim
可以区分粘贴和输入(所以在使用 gvim 时不需要这个),终端版本不能,因为它是终端执行复制和粘贴,而 vim 只是将文本视为输入。因此像对任何其他文本一样应用转换。
有人向我展示了一个巧妙的技巧。在 vi 编辑器中,设置为插入模式 ("i")。然后中键单击您要插入的位置。
好吧,如果它实际上是一条长线,最简单的方法是在命令模式下使用“Y”。只需移动到该行并执行 Y,然后移动到您要放置该行的位置并执行 ap(用于粘贴)。
在尝试了此处和其他答案中建议的所有内容之后,包括尝试使用 vi(m) 命令和 seds 格式化文件之后,我变得很聪明,只是将我想要粘贴的内容重定向到文件中。IE
cat << EOF > yourfile.txt
paste what you are trying to paste
another line of pasted text
yet another
foo > bar?
foo = bar??
end of the file(yay)
EOF
第一行和最后一行之间的所有内容都将粘贴到您的文件中,而不会将那些讨厌的换行符解释为许多空格/制表符。请注意,您粘贴的内容可能有自己的heredoc(就像我的一样,巧合的是LOL)。在这种情况下,需要手动将这些行粘贴到您的编辑器中,这应该不是问题。