当記事では根本的な問題解決には至れていません
Vimでカーソルキー入力時にABCDが出力されてしまう
以下のブログ等、ちょいちょいみなさんを悩ます現象のようです。
Vimで方向キー入力時にABCDが記述されるエラー対処
私も年末に.vimrc
を色々いじっていたら、気付いたら当事象に陥ってしまいました。上記ブログ等を参考にさせてもらって解決を試みましたが、私の環境での事象を解決することはできませんでした。でも、私は意識が高いので、『インサートモードでカーソルキーを使うのは甘え』と自らを誤魔化してこの問題を放置していました。
悔い改める
志低ければ、怠惰に流れる。
- 松下幸之助 -
というわけで、意識が高いどころか意識が低いことを指摘されてしまったので、原因の究明を行いたいと思います。
って言うか、インサートモードでもカーソルキーで移動したいし!
原因の特定
犯人探し①
まずは.vimrc
をリネームしてスッピンのvimの状態で動作確認してみました。インサートモードに入ってカーソルキーを押してもちゃんとカーソルが移動する!AとかBとか出てこない!
ひとまず.vimrc
の設定であることは確定しました。
犯人探し②
あとは.vimrc
の中身を全部コメントアウトし、少しずつコメントを外していくという地道な作業。結局犯人は以下の記述でした。
" NORMALモードに戻るときにIMEをOFFにする
function! ImInActivate()
call system('fcitx-remote -c')
endfunction
" ★こいつが犯人らしい★
inoremap <silent> <C-[> <ESC>:call ImInActivate()<CR>
" ★これも試してみたけどダメだった★
inoremap <silent> <ESC> <ESC>:call ImInActivate()<CR>
インサートモード状態で、全角入力状態でCtrl + [
を押してインサートモードを抜ける際に、全角入力をOFFにするための記述です。
暫定対応
以下のようにしてみました。これだと問題の事象は発生しませんでした。
" NORMALモードに戻るときにIMEをOFFにする
function! ImInActivate()
call system('fcitx-remote -c')
endfunction
" ★これらはOKだった★
inoremap <silent> jj <ESC>:call ImInActivate()<CR>
inoremap <silent> っj <ESC>:call ImInActivate()<CR>
inoremap <silent> <C-j> <ESC>:call ImInActivate()<CR>
まとめ
冒頭にもあるとおり、原因の特定には至れませんでした。絶対的なvim力不足です。いつか原因究明ができた時には当記事にコメント追記したいと思います。
ひとまず、『Ctrl + [
とか普段使わんし!』と自分を誤魔化しつつ(実際あんまり使ってない)、上記3つのマッピングでしばらくはしのいでいこうかと思います。