在Vim中,如果我粘贴以下脚本:

#!/bin/sh
VAR=1
while ((VAR <  10))
    do
        echo "VAR1 is now $VAR"
        ((VAR = VAR +2))
    done
    echo "finish"


我得到以下奇怪的结果:

#!/bin/sh
#VAR=1
#while ((VAR <  10))
#       do
#                       echo "VAR1 is now $VAR"
#                                       ((VAR = VAR +2))
#                                               done
#                                                       echo "finish"
#                                                       


哈希迹象(#)和选项卡已经出现。为什么?

评论

对于vi.stackexchange.com,这可能是一个更好的问题

@EricRenouf为什么? (诚​​实的问题)

@qix我的想法是,这是关于vim如何工作的问题,这是* nix上常用的工具,但是* nix并不是使用vim的必需条件

@JaredBurrows我肯定希望能成功

您如何触发粘贴?用鼠标?

#1 楼

原因有两个:


自动插入注释
自动缩进

要在启用自动缩进的情况下粘贴到vim中,必须更改为通过键入以下内容来粘贴模式:

:set paste


然后您可以更改为插入模式并粘贴代码。粘贴完成后,键入:

:set nopaste


以关闭粘贴模式。由于这是常见且频繁的操作,因此vim提供了切换粘贴模式:

set pastetoggle=<F2>


您可以将F2更改为所需的任何键,现在您可以打开并粘贴轻松关闭。


要关闭注释的自动插入,可以将以下行添加到vimrc中:

augroup auto_comment
    au!
    au FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
augroup END



vim还提供了一个粘贴寄存器,可用于从系统剪贴板粘贴文本。您可以根据系统使用"*p"+p。在没有X11的系统(例如OSX或Windows)上,必须使用*寄存器。在Linux等X11系统上,您可以同时使用两者。

进一步阅读


访问系统剪贴板
如何将某些内容粘贴到剪贴板中的VIM
fakeclip


评论


我一直在使用Vim,却从不知道。非常感谢。

–卡哈
15年4月28日在19:06



大多数现代图形终端仿真器都支持一种称为“包围式粘贴模式”的功能。 Vim可以要求终端启用此模式,然后该模式将使用某些转义序列将粘贴的文本括起来。 Vim可以识别出这种情况,并在粘贴期间关闭环绕/缩进。长话短说:粘贴将“按预期工作”。我不是vim用户,但是快速的网络搜索一定会告诉您如何配置此模式。

– egmont
15年4月28日在19:10

@MichaelDurrant设置粘贴永远不要放在您的vimrc中。它禁用或重置了很多东西,包括插入模式映射,命令行映射,缩写,文本宽度,wrapmargin,自动缩进,smartindent,softtabstop,formatoptions,indentexpr等。 :h paste具有整个列表。大多数人会使用其中的某些或全部内容,并且想知道为什么忽略了这些设置。

–FDinoff
2015年4月29日在3:44



我通常使用:r!cat粘贴逐字记录。

–西蒙·里希特(Simon Richter)
15年4月29日在13:59

可能需要讨论与设置鼠标的交互,当单击鼠标进行粘贴时,设置鼠标可以自动进入和退出粘贴模式。

– Ben Voigt
15年4月29日在16:01

#2 楼

使用vim粘贴。您想要的是粘贴剪贴板缓冲区中的内容
“ + p

这将选择+并将其粘贴到位。

如果您使用的是Linux,*是X /中键单击缓冲区(最后选择的文本)。

然后vim知道它是粘贴内容。

否则vim认为您已键入了粘贴并在粘贴的最后一直执行自己的自动缩进(在复制的缩进之上)。

作为此注意事项,它可以通过SSH进行操作,您需要为您要共享的剪贴板-Y

有关更多详细信息,请参见man ssh

评论


这实际上是正确的答案恕我直言

– Kristoffer Sall-Storgaard
15年4月29日在6:56

看起来这仅适用于图形vim(gvim);在终端仿真器中运行的vim会将最后删除的文本粘贴为“ * p,而不是当前选择。

–Wurtel
2015年4月29日在7:18

我不使用gvim,仅使用终端vim。您的鼠标设置是什么?我的鼠标设置是c。不知道允许鼠标选择时它如何工作。设置鼠标?

– exussum
15年4月29日在7:28



还要检查vim --version se看看它是否在剪贴板支持下编译过+ xterm_clipboard应该在输出中

– exussum
2015年4月29日在7:31

@wurtel:也许您已使用未命名的字符串设置了剪贴板。

–cuonglm
2015年4月29日在9:10

#3 楼

插入选项卡的原因是您已打开自动缩进功能,并且可以在粘贴到终端之前通过关闭自动缩进(:set noai)来禁用该行为。

注释行是通过自动注释生成的,可以通过将其关闭来禁用。

或者,您也可以使用拨动开关:set paste来获得所需的行为,并粘贴格式化的代码和:set nopaste恢复正常行为。