NeoVimでCtrl-V実行後にコントロールコードが直出力されるようになった時の対処例

NeoVim上でCtrl-Vを実行した際に、挿入モードのままESCキーが効かず、且つコントロールコードが出力される状態にしばしばなっていました。状況が緩和した設定等をまとめました。
2020.02.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWS公式ドキュメントからPropertyの文字列等をVim上へコピーする際に、慣習的にCtrl-CCtrl-Vで操作することがよくあります。そしてVim上でCtrl-V操作した時、以下の用にコードの山が入力される状態になることがありました。

挿入モードになったまま、ESCキーでの操作も本来意図したものではなく解除できず、操作する上で致命的な状態です。止む無くvimが動いているターミナルプロセス自体を閉じ、再編集することを繰り返していました。

「コピペができないのならタイピングし続けて覚えればいいじゃない」 とタイピング速度の更なる向上にも繋がりましたが、多少なりに改善して楽したかったため、色々と試してみて緩和された設定とそこに至る過程をまとめてみました。

環境について

利用しているバージョンは以下の通りです。

  • macOS Catalina 10.15.3
  • NVIM v0.4.3

追加した設定

~/.vimrc

set nocompatible
map ^[OA ^[ka
map ^[OB ^[ja
map ^[OC ^[la
map ^[OD ^[ha

dein.toml

[[plugins]]
repo = 'ConradIrwin/vim-bracketed-paste'

:set pasteが自動で掛かります。Ctrl-Vをとっさにやってしまう自分にはこれが必須だったのだと思います。

ConradIrwin/vim-bracketed-paste: Handles bracketed-paste-mode in vim (aka. automatic :set paste)

コントロールコードについて

余り目にすることもないかもしれませんが、以下のブログ記事に解説されています。

Big Sky :: Re: vimで方向キーがABCDを入力してしまう問題の解決

早い話が、古のvim文化とでもいえる代物です。追加したmap指定についても詳細が記載されています。

そしてこれを防ぐ手段の一つとして、上記記事にも触れられていますがnocompatibleがあります。

set nocompatible

が、現環境では設定していませんでした。それは何故か。

set nocompatibleはもういらない - Qiita

参照先の記事を辿ったような覚えはあります。Neovimではcompatibleが存在しない点から不要ということなのですが、一通り読むに「これが正解」というのは無い感じです。

あとがき

追加設定後、Ctrl-V後に該当のコントロールコードがでても、ESCが意図した操作となっていたために保存ができるようになりました。面倒がらずにもっと早く取り組むべきだったかもしれません。