インサートモードで何か文字を打つと数字が増えていくスクリプトをvimrcから読み込ませてます。
追記:再現する最小のvimrcは下記2行のみです。
~/.vim/vimrc
vim
1let g:loaded_matchparen = 1 2source ~/vimscript/test.vim
~/vimscript/test.vim
vim
1 2let b:n = 0 3function! Increment() 4 let b:n += 1 5 " Linuxで別ウィンドウに数字を出力 6 call system('echo "' . b:n . '" > /dev/pts/4') 7endfunction 8augroup increment-group 9 autocmd! 10 autocmd TextChangedI * call Increment() 11augroup END
- vim ~/vimscript/test.vimでVimを起動する
- インサートモードに入る
- 何か文字を入力するとb:nの値が増える
- ノーマルモードに戻り、undoしてVimを起動した時の内容に戻す
- :so %を実行してスクリプトを読み込み直す b:nは0になる
- インサートモードに入るとb:nの値が増える
2番目ではb:nの値が増えないのに対して、6番目では増えました。
:so %でスクリプトを読み込み直すと、インサートモードに入っただけでIncrement()が実行されているのを確認できました。
vimrcにlet g:loaded_matchparen = 1を書くと再現します。
let g:loaded_matchparen = 1をコメントアウトすると再現しなくなります。
let g:loaded_netrwPlugin = 1やlet g:loaded_vimballPlugin = 1
などを書いても再現しないのですが、let g:loaded_matchparen = 1を書いた時だけ再現します。
何故スクリプトを読み込み直すと、インサートモードに入っただけでIncrement()が実行されてしまうのでしょうか?
3/3に試したこと1
Vim 7.4 1-1475
C言語の知識皆無ですがedit.cのg:loaded_matchparenをg:loaded_matchparen11111に置換してconfigureしてからインストールしたら再現しなくなるのかと思いましたが直りませんでした。
3/3に試したこと2
vim -w keyinput.txtで起動後、下記の順番でキーを押す
i a <esc> u :so %<Enterを押す> i <esc> :echo b:n<Enterを押す> :q
echoで1が出力されました。
この順番で押した時のkeyinput.txtに記録された内容です。
ia^[u:so %^Mi^[:echo b:n^M:q^M
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。