矢印キーが挿入モードで機能しない


13

挿入モードで矢印キーを押すと、ナビゲーションの代わりに文字が表示されます。

矢印キーを押すと文字が入力されます

矢印キーを使って移動できるようにしたいのですが。


私が試したもの

私がしているset nocompatible私の中~/.vimrcのvimrcペーストビン)、私は、病原体を使用し、ここで私のです午前~/.vim/bundleディレクトリ:

YouCompleteMe/
emmet-vim/
nerdtree/
node/
vim-airline/
vim-markdown/

問題は最近始まったばかりで、原因を思い出せません。

一部は推奨し:set term=builtin_ansi、これは問題を修正しますが、私の色をすべて削除します。


$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 29 2016 12:51:13)
MacOS X (unix) version
Included patches: 1-2290
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
...

出力全体については、http://pastebin.com/5z1HbpqWを参照してください。

$ echo $TERM
xterm-256color

そしてvimで:

:set compatible?
nocompatible

:set term?
term=xterm-256color

5
おそらく重複していないかもしれませんが(私にはわかり
statox

@statox私はviではなくvimを使用しているため、これは重複ではありません。
theonlygusti 2016

1
どのように画面をそのように記録しましたか?
アンソニー

このサイトのヒントを試しましたか:vim.wikia.com/wiki/…
grodzik 2016年

1
エスケープで挿入モードのマッピングを取り除きます。行133
FDinoff

回答:


7

動作の原因

左矢印を押すと、端末は次のエスケープシーケンスを送信します。

ESC O D

これはとして表記することもできます^[OD^[はの表記でCtrl-[、ESC文字を表記または入力するもう1つの方法です。(挿入モードで試してください!)

Vimはこれをエスケープシーケンスとして認識していないため、キーストロークを自分で入力したかのように処理しています。

  • Esc:挿入モードを終了、
  • O:カーソルの上で新しい行を開始し、挿入モードに入ります、
  • D: 'D'文字を入力してください。

あなたは、これはあなたの端末が挿入モードを入力することによって送信された後、プレスするものであることを確認することができますCtrl-Vが続くLeft矢印。

どうしたの

エスケープシーケンスがタイムアウトしている可能性があります

唯一の Vimは、手動で入力したのと同じ3つの文字からエスケープシーケンスを区別できるような方法は、各文字の受信との間で発生する時間です。したがって、遅い端末や非常にビジーなシステムでは、Vimがエスケープシーケンスではないと判断し、上記のようにキーストロークを解釈するだけで、各文字間に十分な遅延がある可能性があります。

これについては:help vt100-cursor-keys、さらに詳しく説明します。:help timeout 推奨される解決策は、を十分に大きく設定することttimeoutlenですが、両方notimeoutを設定してタイムアウトを完全に無効にするnottimeoutこともできます。

ただし、設定を考えると、これが問題になることはほとんどありません。

Vimはシーケンスを認識しません

問題は、Vimが送信されたエスケープシーケンスを認識せず、キーストロークとして解釈することである可能性が高くなります。これは次のコマンドで確認できます。

:set <left>?

現在の端末構成での作業セットアップでは、次のいずれかの出力が得られます。

t_kl <Left>      ^[O*D
t_kl <Left>      ^[OD

他に何かが表示された場合1、Vimとターミナルは同じ言語を完全に話していません。

これを修正する正しい方法は、端末構成を修正して、矢印キーを押したときに実際に送信されるシーケンスをterminfoデータベースが報告するようにすることですが、そうすることは複雑になる場合があります。少しハックな修正は、Vimが期待しているものと一致するように端末が送信するものを変更することです。デフォルトのMac Terminal.appを使用しているとあなたのコメントから推測します。環境設定→プロファイル→プロファイル→キーボードで、キーストロークごとに送信されるエスケープシーケンスを変更できます。

ただし、最も簡単な解決策は、Vimに直接どのエスケープシーケンスを期待するかを通知することです。これを行うには、ターミナルオプションを次のように設定します。

set <up>=^[OA
set <down>=^[OB
set <right>=^[OC
set <left>=^[OD

^[上記のはリテラルESC文字であることに注意してください。入力した^後に[!を入力することはできません。マッピングを入力する最も簡単な方法は、例えば

set <left>=

次に、まだ挿入モードで、を押しCtrl-Vてからleft矢印を押します。次に、エスケープシーケンスを、矢印キーを押したときにVimが受け取るものに直接設定することに注意してください。

1:考えられる可能性の1つは、CSIシーケンスです。^[[D


最後に、あなたの答えのおかげで、LinuxのWindowsサブシステムでカーソルキーを修正できました。
David FerenczyRogožan

5

この答えは私にとってまったく同じ問題を解決しました。

~/.vimrc、次の行を追加します。

set nocompatible

vimを再起動した後、問題は解消しました


2
あなたがしているので、もし入れて冗長である必要があり、それに。:h 'nocompatible' default on, off when a vimrc or gvimrc file is found.vimrcset nocompatible
statox

2

vimパッケージを更新すると、矢印の問題が修正されました。

Ubuntuを使用している場合は、を実行しapt upgrade vimます。興味深いことに、これapt install vimも役立ちます。さらに興味深いことに、更新後のvimバージョンは同じままです。

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:44:48)
Included patches: 1-1689
Extra patches: 8.0.0056

しかし、それは役立ちます。


1
バージョンは変わらないかもしれませんが、含まれているパッチが更新されたのでしょうか?そうでなければ、私はどのようapt upgradeに問題を解決できるのかわかりません 。
statox

これは私にとって初歩的なOS 5.1 Heraで完璧に動作しました。
praneetloke
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.