GNOME端末がvimに正しい数字キーコードを送信するようにします。

GNOME端末がvimに正しい数字キーコードを送信するようにします。

私は使うvimタグさまざまな色で複数のハイライトを作成できるプラグインです。これには、強調表示された項目間を前後に移動できる数字キーパッド(<k1>...<k9><C-k1>...)を使用する主キーマッピングがあります。<C-k9>

現在、キーマッピングはgvimでのみ機能しますが、gvimにはこれ以上説明しない自己レンダリングの問題があります。 GNOME端末の通常のvimで数字キーボードを使用しようとすると、vimはキーボード文字の上の数字のキーコードを受け取り、強調表示されたイベント間を移動しません。

GNOME端末で実際のテンキーキーボードコードをvimに送信する方法はありますか?

他のキーマップは覚えやすくないか、より多くのキーが必要なため、プラグインのデフォルトのキーマップを変更したくありません。

答え1

GNOME端末(すべての端末エミュレータがマッピング)主なシンボルX(または使用しているディスプレイサーバー)から文字を受信したり、エスケープシーケンス。残念ながら固定マッピング構成スペースがありません。

キーボードは2つのモードで動作できます。ノーマルモード前の行の数字と同じ文字を送信します。しかし、申請方法エスケープシーケンスを送信します。 GNOME端末の2つのモードマッピングは同じですが、vim次のエスケープシーケンスが表示されると予想されます(確認に使用:set termcap)。

t_KC <k0>        ^[O*p
t_KD <k1>        ^[O*q
t_KE <k2>        ^[O*r
t_KF <k3>        ^[O*s
t_KG <k4>        ^[O*t
t_KH <k5>        ^[O*u
t_KI <k6>        ^[O*v
t_KJ <k7>        ^[O*w
t_KK <k8>        ^[O*x
t_KL <k9>        ^[O*y

これらのショートカットを使用するには、入力時にエスケープシーケンスを正しく送信する端末が必要です。申請方法。たとえば、xterm次のように使用して切り替えることができます。VT220タイプファンクションキー、加えて:

XTerm.sunKeyboard: true

あなたのための~/.Xresources

編集する:再コンパイルしたい場合フリーソフトウェアおそらく、次のようにアイテムを変更する必要があります。

static const struct _vte_keymap_entry _vte_keymap_GDK_KP_0[] = {
    {cursor_all, keypad_all, 0, "0", 1},
    {cursor_all, keypad_app, VTE_NUMLOCK_MASK, "0", 1},
    {cursor_all, keypad_app, 0, _VTE_CAP_SS3 "p", -1},
    {cursor_all, keypad_all, 0, X_NULL, 0},
};

パッチをGNOMEに送信します。

関連情報