2012-01-11 24 views
2

端末は矢印キーをEscで始まるシーケンスとして送信します。 Vimには、Escで始まるキーを挿入モードで動作させるオプション'esckeys'があります。これは、Escキーを押すだけで、矢印キーの綴りが始まるかどうかを知ることができないため、実際にEscキーが応答するのを犠牲にしてこれを行います。Vimでは、Escと矢印キーを挿入モードで動作させるにはどうしたらいいですか?

  1. 矢印キーを押下し、カーソルがその方向に移動し、
  2. 押しEscと挿入モードを残してあります

    は、ここで私は挿入モードで行うことができるようにしたいものですすぐに。

私は解決策の始まりがあります。でも:set noesckeysで、私はまだそのよう<Up>にキーをマップすることができます

もちろん
imap q <Up> 

qカーソルが上がるようにする良いキーではありません。代わりに、自分の端末エミュレータをEscで始まらないもの(私が決して入力しないランダムなUnicode文字のようなもの)にマップし、次にimap Vimの指示にそれらの矢印キーをマップしたいと思います。

問題はこれです:私がVimを離れると、私の矢印キーが機能しなくなります。 Vimだけが今何を意味しているかを知っています。

私はiTerm2の中でtmuxの内部で作業しています。このようなバインディングを1つのtmuxペインにしか生かせない方法はありますか?または、実行中に狂った矢印キーバインディングを使用する必要があることをVimに通知しますか?他のアイデア?

(ちなみに、私はすべての挿入モードで自分自身を矢印キーを使用しないように幸せになると思いますが、私は彼らが動作することを期待人とペア、と私は礼儀正しくペアになりたい。)

+0

どの端末を使用していますか?gnome terminal、xterm、およびOSXの端末では、矢印キーは、tmux内でvimを実行しているインサートモードでの動作とまったく同じように動作します。 –

+0

iTerm2を使用しています。矢印キーは機能しますが、 'set esckeys'だけで動作します。私はその質問を明確にした。 – Peeja

答えて

2

ジャストttimeoutlen(注を設定しますtの1つではなく)が非常に小さい値になります。 10ミリ秒のようなものですが、ゼロでも機能します。任意の正のttimeoutlenを指定すると、ほぼ即時に終了します(この時間はミリ秒を待ちます)。ゼロに設定すると、即時に実行する必要があります(矢印キーがまったく完了するのを待たずに、矢印キーであるとみなされ、それは独立した文字列とみなされます)。私は100ミリ秒があり、このタイムアウトに気付かない。

5

あなたの問題は何ですか?あなたの矢印キーはVimで動作するかどうか?彼らはtmuxで働くの?

私はかつてのVim/tmuxの中で(... [A[B)制御文字を表示する矢印キーを使用して問題を持っていた、私は私の~/.vimrc

nnoremap <Esc>A <up> 
nnoremap <Esc>B <down> 
nnoremap <Esc>C <right> 
nnoremap <Esc>D <left> 
inoremap <Esc>A <up> 
inoremap <Esc>B <down> 
inoremap <Esc>C <right> 
inoremap <Esc>D <left> 

を追加することによって、それを解決しました。

+0

彼らは 'set esckeys'を使って動作しますが、' Esc'を挿入モードから即座に取り除きたいのですが、これは 'esckeys'ではできません。 'Esc'または矢印キーの綴りを開始する。私はその質問を明確にした。 – Peeja

+0

私は 'set esckeys'を持っていません。上記のマッピングは、「エスクキー」なしで矢印ナビゲーションを提供するために特に定義されています。 'set esckeys'の使用を主張するなら、':help esckeys'はあなたの質問に対する答えを提供します( 'timeoutlen')。 – romainl

+0

私の質問は:どのように私は挿入モードで矢印キーを使用することができますし、 'Esc 'を挿入モード*(*タイムアウトなし)から即座に取り出してもいいですか? – Peeja

0

これは私のために働いていた:(... OA [^のためのタイプはCtrl-Vを押してカーソルを上に)あなたの.vimrcファイルに次の行を追加します:2:

set t_ku=^[OA 
set t_kd=^[OB 
set t_kr=^[OC 
set t_kl=^[OD 
関連する問題