从Chrome复制和粘贴时,Vim中的额外间距

Two*_*ist 3 vim

每当我从Chrome复制已缩进Vim的文本时,都会得到级联缩进而不是一致的缩进,因此:

def fn(x):
    """Takes x as an input and returns y
    if x:
        return y
Run Code Online (Sandbox Code Playgroud)

变成:

def fn(x):                                                                  
        """Takes x as an input and returns y                                
                if x:                                                       
                                return y
Run Code Online (Sandbox Code Playgroud)

如何防止这种情况发生(首选),或者如何使用其他vim命令快速固定间隔(可接受)?

额外信息

  • vim 7.4,Arch Linux上的铬34
  • 复制方式:在Chromium中突出显示(鼠标或其他方式)CTRL-C,切换到vim并插入模式SHIFT-CTRL-V

rom*_*inl 5

使用终端/操作系统的任何默认方法(菜单,上下文菜单,快捷方式,鼠标等)进行粘贴时,不会粘贴文本:将其插入,就像您键入时一样。因为您启用了自动缩进,所以Vim缩进每行,最终导致阶梯效果(地狱)。

您有两个选择...

  1. paste/nopaste和/或pastetoggle

    您可以:set paste在粘贴之前禁用自动缩进和格式化,然后再进行格式化:set nopaste

    如果您决定走这条路,建议您阅读一下,:h pastetoggle以使整个过程省一点税。

  2. Vim自己的命令和剪贴板集成:

    如果您的Vim版本附带剪贴板支持,则可以使用"+p"*p从其他程序粘贴,而不会产生副作用。

    大多数操作系统随附的默认Vim是“小型”构建,可能缺少许多有用的功能。如果打算将Vim用作编程的主要编辑器,建议安装剪贴板支持附带的更强大的版本。在基于Debian的系统上,最佳选择通常是“ vim-gtk”或“ vim-gnome”。在Arch上,我认为您必须安装“ gvim”软件包。

  • 凉爽的!我实际上已经有了`gvim` 包,所以`"+p` 可以工作。不过真的很尴尬。我也会研究`pastetoggle`。不知道`paste` 模式。 (2认同)