ペーストしたとき自動的に :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 がマウスクリックイベントを捕捉できるので、それをペーストにマップすることもできる。