vimのInsert modeで十字キーを無効化する

公開日:2018-10-23
最終更新:2018-10-29

概要

vimrcをいろいろ整理していたら,何故かInsert modeに入ると十字キーが入力されたときにABCDが入力されてしまう状態になってしまった.
これを防ぎ,十字キーの入力を受け付けないようにいろいろやったことをまとめておく.

環境

OSはArch Linux,ターミナルはDeepin Terminalを使用しています.

vi互換モードを停止させる

調べるとよく出てくるのはset nocompatibleでvi互換モードをやめたら出来たよっていう記事が多かった.
早速vimrcに設定を書き加えてみる.

set nocompatible

これでいけるかなと思ったが,まだABCDって入力されてしまっている.
記事を読むとvimはvimrcがあると自動的にset nocompatibleをやってくれるみたいです.
だったら設定しても意味ないですね.

十字キーを無効化する

vimは nnoremapinoremapvnoremapでそれぞれのモードにおけるキーマッピングを変更できる.
そこで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 modeVisual modeでは無効化されたけど,やっぱりInsert modeでABCDが入力されてしまう...
ちなみにneovimはこの設定で十字キーを無効化することが出来ました.

vimを再インストールしてみる

vimのバージョンを調べるとSmall versionだからおかしいとあったので,自分のバージョンを確認してみたけど,Hugeなのでバージョンの違いによる問題ではなさそう.

とりあえず再インストールしてみたけどやはりダメ...

文字コードを使って無効化する

この記事を見ると十字キーの上や左を押すと^[OA^[ODがvimに送信されるみたい.
この^[OAなどは^[(Esc) + O + Aが入力されることと同じ意味だそうです.つまり,

  1. EscでNormal modeに移行
  2. Oで一つ上の行でInsert modeを開始
  3. Aを挿入

といったようにvimは解釈するようです.思い返すとたしかに十字キーを押しっぱなしにしていたらInsert mode と Normal modeが交互に切り替わっていた.
特定の文字コードを無効化してやればいいんじゃないかと思うので,以下のような設定をvimrcに書き加える.

inoremap ^[OA <Nop>
inoremap ^[OB <Nop>
inoremap ^[OC <Nop>
inoremap ^[OD <Nop>

文字コードは C-v + 十字キーで挿入できます.
これでvimを起動してみるとABCDが挿入されなくなった.
なんか以前まではそのまま動いていたのでターミナルの問題なのかな.

記事が少しでもいいなと思ったらクラップを送ってみよう!
18
+1
@mryyomutgaの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする