別のアプリケーションから何かをコピーしてvimに貼り付けると、インデントが台無しになります。
たとえば、ちょうど今、chrome拡張機能を作成するためにhello-worldチュートリアルからmanifest.jsonファイルをコピーしようとしました。
次のようになります。
{
"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"
}
}
しかし、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
それはこの行と関係があります:
execute pathogen#infect() "filetype plugin indent on
コメントすると、問題は解決しました。ただし、これは、Pythonでコーディングしているときに自動インデントを実現するために使用するものです。自動インデントを取得する別の方法はありますか?
ターミナルでは、Vimは入力されたテキスト(自動インデントが必要な場所)と貼り付けられたテキストを区別できません。したがって、'paste'
オプション(および処理を簡素化するための'pastetoggle'
)があり、これを設定すると、自動フォーマットとインデントが無効になります。別の方法は、それを検出できるグラフィカルGVIMを使用することです。
または、Vimのクリップボードアクセスを使用し(構成されて機能している場合は、試してみる必要があります)、選択/システムクリップボードに"*
/"+
レジスタを使用します。 "+p
または:put +
経由。たぶん、マウスの中ボタンで貼り付けることもうまくいきます。やってみて!
:貼り付けを設定
または http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste を参照してください
(superuser.comは短い答えは良い答えではないと考えるので、ここにいくつかの文字があります)
私が遭遇したこの問題の最善の解決策の1つは、ブラケット貼り付けプラグインを使用することです: https://github.com/ConradIrwin/vim-bracketed-paste -これにより、直接貼り付けることができますインデントがうまくいかないことを心配せずにvimに..貼り付ける前に別のキーを押す必要はありませんなど
1つの可能性は、オプションではないかもしれませんが、gvim
の代わりにvim
を使用することです。後者は、貼り付けと高速テキスト入力を区別できます。 vim
の:paste
のヘルプから:
'paste' boolean (default off)
global {not in Vi}
Put Vim in Paste mode. This is useful if you want to cut or copy
some text from one window and paste it in Vim. This will avoid
unexpected effects.
Setting this option is useful when using Vim in a terminal, where Vim
cannot distinguish between typed text and pasted text. In the GUI, Vim
knows about pasting and will mostly do the right thing without 'paste'
being set. The same is true for a terminal where Vim handles the
mouse clicks itself.
This option is reset when starting the GUI. Thus if you set it in
your .vimrc it will work in a terminal, but not in the GUI. Setting
'paste' in the GUI has side effects: e.g., the Paste toolbar button
will no longer work in Insert mode, because it uses a mapping.
When the 'paste' option is switched on (also when it was already on):
- mapping in Insert mode and Command-line mode is disabled
- abbreviations are disabled
- 'textwidth' is set to 0
- 'wrapmargin' is set to 0
- 'autoindent' is reset
- 'smartindent' is reset
- 'softtabstop' is set to 0
- 'revins' is reset
- 'ruler' is reset
- 'showmatch' is reset
- 'formatoptions' is used like it is empty
These options keep their value, but their effect is disabled:
- 'LISP'
- 'indentexpr'
- 'cindent'
NOTE: When you start editing another file while the 'paste' option is
on, settings from the modelines or autocommands may change the
settings again, causing trouble when pasting text. You might want to
set the 'paste' option again.
When the 'paste' option is reset the mentioned options are restored to
the value before the moment 'paste' was switched from off to on.
Resetting 'paste' before ever setting it does not have any effect.
Since mapping doesn't work while 'paste' is active, you need to use
the 'pastetoggle' option to toggle the 'paste' option with some key.