我正在努力学习Vim。

当我从剪贴板将代码粘贴到文档中时,每一行的开头都会有额外的空格:

line
  line
    line

我知道你可以关闭自动缩进,但我无法让它工作,因为我有一些其他设置冲突或其他问题(在我的.vimrc中看起来很明显,但当我删除它们时似乎无关紧要)。

如何在粘贴代码时关闭自动缩进,但在编写代码时仍然有vim自动缩进?这是我的.vimrc文件:

set expandtab  
set tabstop=2  
set shiftwidth=2  
set autoindent  
set smartindent  
set bg=dark  
set nowrap  

当前回答

Mac用户可以通过以下方式直接从粘贴板读取来避免自动格式化:

:r !pbpaste

其他回答

如果您在本地工作,可以使用以下键序列从系统剪贴板粘贴:

"+p

这是一个正确的vim命令,因此无需担心先进入插入模式或关闭自动缩进。

当然,如果您正在远程工作(例如,通过SSH的控制台),那么这将不起作用,您应该按照其他地方的描述执行:set noai,insert mode,paste into console,leave insertmode,:set ai路由。

来自vim:]p

从外部:“*]p或”+]p

这是一篇文章,作者想出了如何重新映射粘贴事件以自动打开粘贴模式,然后关闭粘贴模式。适用于MacOSX上的tmux/iTerm。

以下vim插件通过其“括号粘贴”模式自动处理:https://github.com/wincent/terminus

设置“括号粘贴”模式,这意味着您可以忘记手动设置“粘贴”选项,只需在任何模式下继续粘贴即可。

当在终端内部工作时,vim括号内的粘贴vim插件将自动处理粘贴,而无需在粘贴之前或之后进行任何击键。

它通过检测括号内的粘贴模式来工作,这是由“现代”x术语兼容终端(如iTerm2、gnome终端和其他使用libvte的终端)发送的转义序列。作为额外的奖励,它也适用于tmux会话。我在连接到linux服务器并使用tmux的Mac上成功地使用了iTerm2。