vim の挿入モード(インサートモード)で矢印キーを押すと、A(↑),B(↓),C(→),D(←) が入力されてしまう。
よくキーマップを変更する方法が紹介されているけど、色々問題もあるみたいなので、今回はその方法はなし。
今回は「Vimリファレンスマニュアル (ヘルプ) による方法」と「vi 互換モードをやめる方法」を紹介。
Vimリファレンスマニュアル (ヘルプ) による方法
Vimの中で「:help vt100-cursor-keys」や「:help xterm-cursor-keys」を実行すると、解決策が紹介されている。
同じ内容が こちら (日本語) でも見られる。
vt100 や xterm などの端末ではカーソルキーを押すと <Esc>OA や <Esc>OB などが送られます。不運なことに、これらは「挿入を終了し、上に新規行を作成して 'A' や 'B' を挿入する」という挿入モードでのコマンドでもあります。
このコマンドを実行するのでなく、カーソルキーのシーケンスが入力されたのだと誤認識してしまうかもしれません。これを防ぎ、意図通りの動作をさせるには次の設定を使います
:
:set notimeout " マッピングについてタイムアウトしない
:set ttimeout " 端末のキーコードについてタイムアウトする
:set timeoutlen=100 " 100 ミリ秒後にタイムアウトする
この設定をすると、キーコードが 100 ミリ秒以内に送られた場合のみカーソルキーと認識されます。ユーザーが普通に入力するときはそんなに速くないので、たとえまったく同じキーコードのシーケンスを送信しても、個々のコマンドと認識されます。
Vim documentation: term
上記を Vim 中で実行するか、~/.vimrc に以下の様に記述すればいい。
if !has('gui_running') set notimeout set ttimeout set timeoutlen=100 endif
vi 互換モードをやめる方法
Vimの中で「:help 'nocompatible'」を実行すると、vi 互換モードについての説明が表示できる
同じ内容がこちら (日本語) でも見られる
VimをなるべくVi互換にするか、便利な機能を使えるようにするかを決定する。これは、特別な種類のオプションである。このオプションの値が変更されると、それに伴って他のオプションも変更されるからだ。
(略)
このオプションをファイル vimrc 内で設定するなら、一番先頭に置くこと。
(略)
オフに設定すると、「Viの既定値」と「Vimの既定値」が異なっているオプションについて、Vimの既定値が用いられるようになる。下の表で '+' がついているものを参照。その他のオプションは影響を受けない。
オンにすると、他のオプションがいくつか変更され、Vimはできる限りVi互換を保とうとする。下の表を参照。これはVi互換の編集方法に戻りたいと思うときに使うことができる。
(表は省略)
Vim documentation: options
.vimrc の先頭に以下を追加すればいい
" Vim 互換モードを使用しない " このオプションは .vimrc の先頭に記述すること set nocompatible
ちなみに・・・
Cygwinで、vi は vim をリンクしてるのかと思ったら、別物?
$ ls -l /usr/bin/vi* -rwxr-xr-x 1 ike None 828K 6月 23 04:31 /usr/bin/vi.exe* lrwxrwxrwx 1 ike None 7 8月 2 19:42 /usr/bin/view -> vim.exe* -rwxr-xr-x 1 ike None 2.1M 6月 23 04:31 /usr/bin/vim.exe* lrwxrwxrwx 1 ike None 7 8月 2 19:42 /usr/bin/vimdiff -> vim.exe* -rwxr-xr-x 1 ike None 2.1K 6月 23 04:31 /usr/bin/vimtutor*でも、vi を実行しても、vim を実行しても、Vimのトップ画面が表示される。vi で実行すると Vim が Vi 互換モードで起動するんだろうか?? 一応、.bashrc で alias を設定しておいた
alias vi='vim'
0 件のコメント:
コメントを投稿