我正在努力学习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

其他回答

我是一个Python用户,有时会复制并粘贴到Vim中。(我从Mac切换到Windows WSL),这是困扰我的一个小故障。

如果你触摸script.py然后触摸vi script.py,vi会检测到它是一个Python脚本,并尝试提供帮助,自动缩进,使用额外缩进粘贴等。如果你不告诉它是Python脚本,这不会发生。

然而,如果这种情况已经发生在您身上,那么当您粘贴已经完全缩进的代码时,默认的自动缩进可能是一场噩梦(请参见下面的倾斜梯形图)。

我尝试了三种选择,结果如下

set paste        # works perfect 
set noai         # still introduced extra whitespace
set noautoindent # still introduced extra whitespace

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

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

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

我通常使用:r!cat然后粘贴(shift+insert)内容,然后CTRL+D。

无需启用和禁用,直接使用。

自vim 8(2016年发布)以来,原生粘贴/括号粘贴是最好的、最简单的方法。它甚至可以在ssh上运行!(括号粘贴适用于Linux和Mac,但不适用于Windows Git Bash)

确保您有vim 8+(您不需要+剪贴板或+xterm_clipboard选项)。vim--版本|头-1只需在正常模式下使用OS本机粘贴命令(例如ctrl+shift+V或cmd+V)。对于插入模式,不要按i。


Test

复制(ctrl+shift+C或cmd+C)此输出(2行,带有制表符缩进)到系统剪贴板:echo-e'\ta\n\tb'使用autoindent启动一个干净的vim 8+:vim-u NONE--noplugin-c'设置自动缩进'在正常模式下从系统剪贴板粘贴(ctrl+shift+V或cmd+V)。对于插入模式,不要按i。a和b应与单个制表符缩进对齐。您甚至可以在ssh连接到远程机器时执行此操作(远程机器需要vim8+)。现在尝试旧方法,它将使用额外的选项卡自动缩进第二行:按i进入插入模式。然后使用ctrl+shift+V或cmd+V进行粘贴。a和b现在错位了。


安装Vim 8

Ubuntu 18.04-默认情况下带有Vim 8。Ubuntu 16.04-从PPA安装。sudo添加apt存储库ppa:jonathonf/vimsudo apt更新sudo apt安装vimMac:brew安装vim

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

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