我正在努力学习Vim。

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

line
  line
    line

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

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

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

当前回答

我只是将setclipboard=unnamed放在my.vimrc中。这使得默认的粘贴缓冲区映射到X的剪贴板。

所以,如果我在终端中标记一点文本,我可以简单地按p将其粘贴到vim中。类似地,我可以在vim中拖动内容(例如YY将当前行拖动到缓冲区中),然后在任意窗口中单击鼠标中键将其粘贴。

我不知道。我觉得非常方便。

其他回答

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

"+p

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

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

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

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

将此添加到~/.vimrc中,您只需在粘贴前后按F2即可:

set pastetoggle=<F2>

不幸的是,我发现上面提到的vim插件不适用于iTerm2 3.0.15(公平地说,我不知道这是否在旧版本上发生了)-但我发现了这个黑客。

使用iTerm2 vim键映射命令-p以进行粘贴。显然,这只适用于iTerm2。

它的工作原理。我使用“jk”进入逃生模式,因此您还需要:

:inoremap jk

在你的.virc中。

然后它只调用P进入粘贴模式,“+P从剪贴板粘贴,然后P禁用粘贴模式。

如果你在mac上,macvim似乎可以很好地处理它,而不必切换粘贴。

brew install macvim—覆盖系统vim