VIMでは、挿入モードでESCと矢印キーを動作させるにはどうすればよいですか?
質問
端子は、矢印キーをシーケンスとして送信します。 Esc
. 。 VIMにはオプションがあります 'esckeys'
始まるキーを可能にします Esc
挿入モードで動作します。これを実際に犠牲にして行います Esc
vimがあなたがただ押しているかどうかはもうわからないので、すぐに応答します Esc
または、矢印キーを綴り始めます。
挿入モードでできることは次のとおりです。
- 矢印キーを押して、カーソルをその方向に移動させ、
- プレス
Esc
すぐに挿入モードを残します。
解決策の始まりがあります。でもで :set noesckeys
, 、私はまだ鍵をマップすることができます <Up>
そのようです:
imap q <Up>
もちろん、 q
カーソルを上げるための良い鍵ではありません。代わりに、ターミナルエミュレーターに矢印キーをマッピングしたいと思います。 Esc
(いくつかのランダムなユニコード文字のように、私は決して入力しません)そしてその後 imap
それらはヴィムの方向へ。
問題はこれです。VIMを離れると、矢印キーが機能しなくなります。 Vimだけが彼らが今何を意味するかを知っています。
ITERM2内のTMUX内で作業しています。このようなバインディングを作る方法はありますか?または、vimにtmuxに、実行中にクレイジーアローキーバインディングを使用する必要があることを知らせますか?他にアイデアはありますか?
(ちなみに、私は自分で挿入モードで矢印キーを使用しないことを嬉しく思いますが、私は彼らが働くことを期待する人々とペアになり、私は礼儀正しいペアになりたいです。)
解決
設定するだけです ttimeoutlen
(注:2つのリーディング t
S、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