menu
書いてる野郎
orebike@gmail.com
VimをiTerm上で使おうとしたところ・・・
insertモードで矢印でカーソルを動かそうと思うと
A B C D
とアルファベットが入力されてじゃんじゃん改行されてしまう。さーこまった。 この現象はgVimのほうでは発生せず、ターミナルバージョンのみで発生する。
いろいろ調べたが、原因はターミナルのエスケープシーケンスの受付時間の問題のようだ。 ターミナルはエスケープシーケンスによって文字の入力なのかそれとも端末の制御なのか判断している。 しかし歴史的な理由でその判断が難しい制御がある。その判断を確定させるためにユーザーからの入力を若干待つ仕様になっている。
こいつの設定が鈍いとエスケープシーケンスを伴う入力に対して誤動作するみたいだ。 そこで待つ長さをある程度区切ってしまって、処理を先にすすめることで誤動作を防止するといいみたい
ということで.vimrc
に設定する
if !has('gui_running') set notimeout set ttimeout set timeoutlen=100 endif
この設定をするとエスケープシーケンスを100msec以内に入力しないと制御として反映されないのだが、 普通は機械がやるので通常使う範囲では問題無いということでOK
imap ^[OA <Up> imap ^[OB <Down> imap ^[OC <Right> imap ^[OD <Left>
ここで^[OA
と書かれている部分はctrl+v↑と入力する。
この方法でもなんとかなるが、escで抜けるのが遅くてイライラするので結局だめ
export TERM=dtterm
とか書いてターミナルエミュレータのタイプを変えると治るというやつ。 探して一番最初に出てきた。
確かにinsertモードでもカーソルキーが効くようになったが、移動と同時にノーマルモードに抜けてしまうような挙動。 これじゃだめだ〜
2012-04-23 新規