ペーストしたとき自動的に :set paste するハック
マウス右クリックでペーストしたとき、自動的に :set paste になるとうれしいと思っていたのでやってみた。
次の条件を満たすとき自動的に 'paste' がオンになる。
・入力バッファに11バイト以上溜まっている
・入力バッファに 0x0d (CR) が含まれている
Index: getchar.c =================================================================== RCS file: /cvsroot/vim/vim7/src/getchar.c,v retrieving revision 1.48 diff -u -r1.48 getchar.c --- getchar.c 13 Sep 2007 16:25:34 -0000 1.48 +++ getchar.c 29 Nov 2007 14:39:39 -0000 @@ -2929,6 +2929,10 @@ if (typebuf_changed(tb_change_cnt)) return 0; + if (len > 10 && memchr(buf, 0x0d, len)) { + do_cmdline_cmd("set paste"); + showmode(); + } return fix_input_buffer(buf, len, script_char >= 0); }
これと
au InsertLeave * set nopaste
を組み合わせるとなかなか快適。
同じ提案が vim メーリングリストに出たことがあったけど、反対されていた。
ちなみにターミナルによっては vim がマウスクリックイベントを捕捉できるので、それをペーストにマップすることもできる。