Vim 复制/粘贴弄乱了缩进

Luk*_*uke 11 clipboard vim indentation vimrc

每当我从另一个应用程序复制某些内容然后将其粘贴到 vim 中时,它都会弄乱缩进。

例如,刚才我尝试从 hello-world 教程中复制 manifest.json 文件以创建 chrome 扩展。

它看起来像这样:

{
  "manifest_version": 2,

  "name": "One-click Kittens",
  "description": "This extension demonstrates a browser action with kittens.",
  "version": "1.0",

  "permissions": [
    "https://secure.flickr.com/"
  ],
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我将它粘贴到 vim 中时,它看起来像这样: 在此处输入图片说明

我的vimrc如下:

"se t_Co=256
syntax enable

set nowrap
set mouse=a
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab 
set number
set showcmd
set cursorline
set showmatch

execute pathogen#infect()
"filetype plugin indent on

"folding settings
set foldmethod=indent   "fold based on indent
set foldnestmax=10      "deepest fold is 10 levels
set nofoldenable        "dont fold by default
set foldlevel=1            

set clipboard=unnamed  "share one clipboard for everyhting    
Run Code Online (Sandbox Code Playgroud)

它与这一行有关:

execute pathogen#infect() "filetype plugin indent on
Run Code Online (Sandbox Code Playgroud)

如果我将其注释掉,问题就解决了。但是,这是我在 python 中编码时用来实现自动缩进的。还有其他方法可以自动缩进吗?

小智 12

:设置粘贴

或查看http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste

(这里有一些字符,因为superuser.comthinksshortanswersarenotanygoodanswers)


Ing*_*kat 11

在终端中,Vim 无法区分键入的文本(需要自动缩进的地方)和粘贴的文本。所以有一个'paste'选项(并'pastetoggle'简化处理),它在设置时禁用自动格式化和缩进。另一种方法是使用图形 GVIM,它可以检测到这一点。

或者,您使用 Vim 的剪贴板访问权限(如果已配置并正常工作,您需要尝试一下),并使用"*/"+寄存器进行选择 / 系统剪贴板,例如 via"+p:put +。也许用鼠标中键粘贴也可以;试试看!