0

これが私の.vimrcです:

inoremap <esc> <nop>

を使用してvimを起動するvim +startinsertと、次の奇妙な文字が自動的に挿入されたバッファが表示されます(そして、「c」の後にカーソルがある挿入モードになっています):

[?1;2c

なぜこれが起こっているのかについてのアイデアはありますか?

4

2 に答える 2

4

t_RVオプションが設定されている場合、Vimはそれを使用して端末にそれ自体について尋ねます。端末は通常、Escで始まるシーケンスで応答し、挿入マッピングはこの応答シーケンスに干渉します。最初のEscは「食べられ」、残りはVimによる通常のユーザー入力と見なされます。

ターミナルエミュレータにrxvtを使用していますか?出力は、 Rxvtがxterm-defaultクエリ(Vimが使用する場合でも)に応答して送信することをVimソースコードが示すシーケンスと一致します。t_RVTERM=rxvt

この特定の問題を回避するためt_RVに(たとえば、で)クリアすることができます。~/.vimrc

set t_RV=

ただし、Escの(非)マッピングにより、非ASCIIキーの使用が特に困難になる場合があります。他のほとんどすべてのキー(矢印、Home、End、Page Up / Down、F1〜F12など)は、Escで始まるシーケンスを送信します。 。あなたのマッピングはおそらくVimがこれらのキーが送信するシーケンスを認識できるようにするのを妨げるでしょう。

Vimの「イージーモード」(vim -y)に興味があるかもしれません。自動的に挿入モードで起動し、「クリックアンドタイプ」エディターのようにVimモードを作成するマッピングやその他の設定を追加します。:help -yおよびを参照してください:help evim-keys(挿入モードでスタックしている場合は、最初にCoと入力する必要があります)。Vimのモードを避けようとしている場合は、単に別のスタイルのエディターを調べたいと思うかもしれません。

于 2013-03-21T05:42:27.930 に答える
2

これらの文字が挿入される理由を正確に言うことはできませんが、ユーザー入力以外のデータを端末 [エミュレーター] から vim に転送するために使用されるすべて<Esc>またはほとんどすべてのシーケンスの最初の文字です。エスケープは、マウス クリック、 …<code>F12 キーの押下、場合によっては (端末によって大きく異なります。通常、端末はこれに対して別の何かを出力します)、矢印キー、/ 、サイズ変更に関する情報などを伝えるために使用されるシーケンスを開始します。一部のデータは通常のユーザー入力として処理されます (注:いずれの場合でも、端末は入力を渡すために使用する同じストリームを使用します。この入力が処理される C コードのレイヤーに違いがあるだけです)。それがあり、エスケープを再マップすると、そのような奇妙な文字が表示されます。F1<Del><BS><PageUp><PageDown>

常に挿入モードの vim 構成をセットアップしようとしている場合は&insertmode、 ではなく、設定が必要であることに注意してください:startinsert。しかし、vim のことを忘れた方がずっといいでしょう。通常モードをデフォルトのモードにしたくないのであれば、vim は必要ありません。

于 2013-03-20T19:19:13.033 に答える