vimのInsert modeで十字キーを無効化する
vimrcをいろいろ整理していたら,何故かInsert modeに入ると十字キーが入力されたときにABCDが入力されてしまう状態になってしまった.
これを防ぎ,十字キーの入力を受け付けないようにいろいろやったことをまとめておく.
環境
OSはArch Linux,ターミナルはDeepin Terminalを使用しています.
vi互換モードを停止させる
調べるとよく出てくるのはset nocompatibleでvi互換モードをやめたら出来たよっていう記事が多かった.
早速vimrcに設定を書き加えてみる.
set nocompatible
これでいけるかなと思ったが,まだABCDって入力されてしまっている.
記事を読むとvimはvimrcがあると自動的にset nocompatibleをやってくれるみたいです.
だったら設定しても意味ないですね.
十字キーを無効化する
vimは nnoremap,inoremap,vnoremapでそれぞれのモードにおけるキーマッピングを変更できる.
そこでvimrcに以下のような記述を書き加えてみる.
nnoremap <Up> <Nop> nnoremap <Down> <Nop> nnoremap <Right> <Nop> nnoremap <Left> <Nop> inoremap <Up> <Nop> inoremap <Down> <Nop> inoremap <Right> <Nop> inoremap <Left> <Nop> vnoremap <Up> <Nop> vnoremap <Down> <Nop> vnoremap <Right> <Nop> vnoremap <Left> <Nop>
これで大丈夫だろと思って編集したら,確かにNormal modeとVisual modeでは無効化されたけど,やっぱりInsert modeでABCDが入力されてしまう...
ちなみにneovimはこの設定で十字キーを無効化することが出来ました.
vimを再インストールしてみる
vimのバージョンを調べるとSmall versionだからおかしいとあったので,自分のバージョンを確認してみたけど,Hugeなのでバージョンの違いによる問題ではなさそう.
とりあえず再インストールしてみたけどやはりダメ...
文字コードを使って無効化する
この記事を見ると十字キーの上や左を押すと^[OA
や^[OD
がvimに送信されるみたい.
この^[OA
などは^[
(Esc) + O
+ A
が入力されることと同じ意味だそうです.つまり,
Esc
でNormal modeに移行O
で一つ上の行でInsert modeを開始A
を挿入
といったようにvimは解釈するようです.思い返すとたしかに十字キーを押しっぱなしにしていたらInsert mode と Normal modeが交互に切り替わっていた.
特定の文字コードを無効化してやればいいんじゃないかと思うので,以下のような設定をvimrcに書き加える.
inoremap ^[OA <Nop> inoremap ^[OB <Nop> inoremap ^[OC <Nop> inoremap ^[OD <Nop>
文字コードは C-v + 十字キーで挿入できます.
これでvimを起動してみるとABCDが挿入されなくなった.
なんか以前まではそのまま動いていたのでターミナルの問題なのかな.