pastetoggle と typebuf

ck で Cygwinvim を使うとき、インサートモードで pastetoggle が効かないという現象にずっと前から悩まされていた。

という不思議な現象だったが、原因は .vimrc に書いてあるこれだった:

inoremap <silent> <Esc> <Esc>:set iminsert=0<CR>

本来なら、(termcap の「k;」)を押したときに typebuf.tb_buf に { 128 k ; }というシーケンスが入るはずが、{ Esc : [ 2 1 ~ }というシーケンスが入っていた。
F10=Esc [ 2 1 ~である。

inoremap A A<Esc>:echo hoge<CR>B

のとき A を押すと、先にマッピングが展開・実行されて { A : B } というシーケンスが pastetoggle チェックに渡されるらしい。実際に ":echo hoge"とタイプしたときも、":" のみが typebuf.tb_buf に格納される。
vgetorpeek() は後でもっとよく見てみよう。