VIMでは、挿入モードでESCと矢印キーを動作させるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/8813855

  •  26-10-2019
  •  | 
  •  

質問

端子は、矢印キーをシーケンスとして送信します。 Esc. 。 VIMにはオプションがあります 'esckeys' 始まるキーを可能にします Esc 挿入モードで動作します。これを実際に犠牲にして行います Esc vimがあなたがただ押しているかどうかはもうわからないので、すぐに応答します Esc または、矢印キーを綴り始めます。

挿入モードでできることは次のとおりです。

  1. 矢印キーを押して、カーソルをその方向に移動させ、
  2. プレス Esc すぐに挿入モードを残します。

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

imap q <Up>

もちろん、 q カーソルを上げるための良い鍵ではありません。代わりに、ターミナルエミュレーターに矢印キーをマッピングしたいと思います。 Esc (いくつかのランダムなユニコード文字のように、私は決して入力しません)そしてその後 imap それらはヴィムの方向へ。

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

ITERM2内のTMUX内で作業しています。このようなバインディングを作る方法はありますか?または、vimにtmuxに、実行中にクレイジーアローキーバインディングを使用する必要があることを知らせますか?他にアイデアはありますか?

(ちなみに、私は自分で挿入モードで矢印キーを使用しないことを嬉しく思いますが、私は彼らが働くことを期待する人々とペアになり、私は礼儀正しいペアになりたいです。)

役に立ちましたか?

解決

設定するだけです ttimeoutlen (注:2つのリーディング tS、1つではなく)非常に小さな値に。 10ミリ秒のようなものですが、ゼロでも機能する可能性があります。プラスのtimeoutlenを使用すると、ほぼ即時の出口があります(その量のミリ秒が待ちます)。 Stdinバッファーでは、矢印キーであると考えられているかどうかは、独立した文字のシーケンスと見なされます)。私は100ミリ秒を持っていて、このタイムアウトに気付かない。

他のヒント

あなたの問題は正確に何ですか?あなたの矢印キーはVIMで動作しますか?彼らはTMUXで働いていますか?

コントロール文字を表示する矢印キーに問題がありました([A,[B…)vim/tmuxでは、追加することで解決しました

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>

わたしの ~/.vimrc.

Windows 10を使用している人がここに来たら、私のために何がうまくいったのかを伝えることができます。 :SET TERM = ANSI

それを.vimrcファイルに入れたり、エディターに設定してそれが機能するかどうかを確認したりできます。

これは私のために機能しました:.vimrcファイルに次の行を追加します(ctrl-vと入力し、 ^[oa ...)にカーソルを押します):

 set t_ku=^[OA
 set t_kd=^[OB
 set t_kr=^[OC
 set t_kl=^[OD
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top