basyura's blog

あしたになったらほんきだす。

今度こそ本当に動いた

set paste

が原因だった。貼り付け時に便利だと思って(むしろ推奨ぐらいの勢いで)設定してたんだけどこの設定を削除したら動き出した。
何がダメなのか分からないので help を引いてみる。

						*'paste'* *'nopaste'*
'paste'			切替	(既定ではオフ)
			グローバル
			{Vi にはない}
	オンにするとVimはPasteモードに移行する。これはテキストを別のウィンドウ
	から切り取ったりコピーして、Vim内に張り付けたいときに便利であり、予想
	しない作用を避けることができる。
	このオプションはVimをターミナルで使っているときに便利である。ターミナ
	ルでは打ち込まれたテキストと張り付けられたテキストの区別がつかないから
	だ。GUI版のVimでは張り付け時にすべき動作を知っているので、'paste' がオ
	フでも大抵うまくいく。Vimがマウスクリックを扱えるようなターミナルでも
	同様にうまくいく。
	GUI を開始するとこのオプションはオフになる。そのため、.vimrc 内でこの
	オプションをオンにすると、それはターミナル内では働くが、GUI ではオフに
	なる。GUI 版で 'paste' をオンにすると次のような副作用がある: 例. 「ペ
	ースト」ツールバーボタンがインサートモードで動作しなくなる。このボタン
	はマッピングを使っているためである。
	'paste' がオンのときは、以下のように設定が変わる。
		- InsertモードとCommand-lineモードでのマッピングが無効になる
		- 略語展開が無効になる
		- 'textwidth' が 0 になる
		- 'wrapmargin' が 0 になる
		- 'autoindent' がオフになる
		- 'smartindent' がオフになる
		- 'softtabstop' が 0 になる
		- 'revins' がオフになる
		- 'ruler' がオフになる
		- 'showmatch' がオフになる
		- 'formatoptions' が空のときのような動作になる
	以下のオプションの値に変化はないが、働きは無効になる。
		- 'lisp'
		- 'indentexpr'
		- 'cindent'
	NOTE: 'paste' がオンのときに別のファイルの編集を始めると、モードライン
	や autocommand によって設定が再び変わり、張り付け時に問題が起きること
	があるので注意。そのときは 'paste' を再びオンにするとよいだろう。
	'paste' をオフにすると、上記のオプションの設定は 'paste' がオンになっ
	た時点の前の状態に復元される。
	'paste' をオンにする前にオフにしても何の効果もない。
	'paste' がオンの間はマッピングが無効になるので、どれかのキーで 'paste'
	を切り替えるには 'pastetoggle' を使う必要がある。

な、なんですとーー!!autoindent を設定してるのに効かなくなるからおかしいなと思ってたんだ・・・。ちゃんと help で確認してから設定しようということだな。
ちなみに set paste で動かないのは仕様です。

追記

Shougo さんから頂いたコメント。

ちなみに、なぜneocomplcacheが動かない仕様なのかというと、
set paste時に入力された文字列は、ただの貼り付けであり、
ユーザーの入力ではない、よって補完する必要はないからです。
同様に、autocomplpopも無効になります。

知らない事だらけやぁ・・・。