我正在努力学习Vim。

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

line
  line
    line

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

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

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

当前回答

这个问题已经得到了解答,但我想我也可以添加自己的解决方案:

如果您只想对每种文件类型禁用自动缩进系统(基本上,完全禁用自动缩进功能),可以执行以下操作:

备份indent.vim文件:sudo mv/usr/share/vim/vim81/index.vim/usr/share/vim/vim81/Index.vim.org创建新的空缩进.vim文件:sudo touch/usr/share/vim/vim81/index.vim

其他回答

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

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

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

:inoremap jk

在你的.virc中。

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

这对我来说很有用(+寄存器的情况,我使用的是aps之间的交换缓冲区):

imap <silent> <S-Insert> <C-O>:set noai<CR><C-R>+<C-O>:set ai<CR>

这个问题已经得到了解答,但我想我也可以添加自己的解决方案:

如果您只想对每种文件类型禁用自动缩进系统(基本上,完全禁用自动缩进功能),可以执行以下操作:

备份indent.vim文件:sudo mv/usr/share/vim/vim81/index.vim/usr/share/vim/vim81/Index.vim.org创建新的空缩进.vim文件:sudo touch/usr/share/vim/vim81/index.vim

另一种粘贴方法是在插入模式下通过<C-r>并删除寄存器的内容(这里是全局寄存器)。请参见::h i_ctrl-r和h i_ctrl-r_ctrl-O。

从vim帮助文档中:

按字面意思插入寄存器的内容,不要自动缩进。与使用鼠标粘贴相同。不替换字符!“.”寄存器(最后插入的文本)仍按键入方式插入。{不在Vi中}

因此,要在不自动缩进的情况下将内容粘贴到vim中,请在大多数unix系统中使用<C-r><C-o>*。

您可以在vimrc-inoremap中添加一个映射<C-r><C-r><C-o>,这样您就可以使用<C-r>>*正常粘贴*寄存器的内容,而无需自动缩进。

注意:这只在vim是用剪贴板编译的情况下有效。

来自vim:]p

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