web-dev-qa-db-ja.com

PageDownキーとPageUpキーを正常に機能するようにマップする方法

viまたはvimを使用してドキュメントを開くと、を使用してページをナビゲートできません。 Page Up そして Page Down キー。これらのキーを押すと、vimは異常なmaanerで動作しているように見え、カーソルの下の文字の大文字と小文字が変わります。その後、insertモードに戻るまでに数秒かかります。

これらのキーをマップする方法を教えてください。キーを押すと、次のようにスムーズにページをスクロールできます。 Ctrl+(fbud )。

更新

マシンとVimの情報

$ cat /etc/*-release  
Red Hat Enterprise Linux Server release 5.5 (Tikanga)


$ vim --version
VIM - Vi IMproved 7.0 (2006 May 7, compiled Jun 12 2009 07:08:36)

注意

このマシンに接続するためにPuTTYを使用しています。

2
mtk

更新:

このマシンに接続するためにPuTTYを使用しています

それから私は正しく推測しました、そして以下の私の答えはおそらく当てはまります。


元の答え:

あなたの質問にはあなたの問題を確実にするのに十分な情報がありませんが、私たちが待っている間、私は聴衆に小さな話を提供させてください:

ターミナルエミュレータとエディタ

PuTTYなどのxtermエミュレーターを使用してLinuxコンピューターにアクセスする場合、PgUpキーは4文字Escape[5~をLinuxシステムに送信します。

Linuxシステムはこれを処理してから、アクションのないキーストロークをアプリケーションに渡します。

アプリケーションvimは、システムライブラリ(私は信じています)を使用して、環境変数TERMの値とterminfoの対応するエントリに基づいて、文字シーケンスを「キー」に変換し直します。

TerminfoがPgUp(またはその他のキー)をEscape[5~として定義していない場合、Vimは(おそらく)4文字を個別に処理します。

"多くのカーソルキーコードはEscで始まります。VimはこれがEscキーのシングルヒットなのか、カーソルキーシーケンスの開始なのかを確認する必要があります。次の文字が到着するのを待ちます。そうでない場合1秒以内に到着すると1つのEscが想定されます。 " したがって、vimは、Escが挿入モードを終了するかどうかを確認するために少し待機します。

[5は有効なVimコマンドです。しかし、VimはEscを認識できないエスケープシーケンスの開始を通知していると見なしている可能性があります。そのシーケンスがどこで終了するかを推測し、その時点から文字をコマンドまたはデータとして解釈し始める必要があります。

~は、カーソルの下の文字の大文字と小文字を切り替えるvimコマンドです。

ハッピーエンド

TERMを正しく設定し(PuTTY /エミュレーター設定と一致するように)、terminfoにPgUpなどの定義があることを確認します。Unixランドでは、IBM PCが生まれる前にキーボードが存在し、一部には Previous Page キーなので、このキー機能の名前はkppです。

  $ infocmp xterm | grep kpp
    knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, mc0=\E[i, mc4=\E[4i,

追記

これらのキーをマッピングする方法

私の知る限り、PuTTYには任意のキーマッピング機能はありません(ウィッシュリストに含まれていたと思います)。

  1. よく知られ、明確に定義された端末タイプをエミュレートするようにPuTTYを構成します。残念ながら、xtermのようなことをしなければならないようなものはありません。

  2. PuTTYがLinuxボックスにエミュレートしている端末タイプを通知していることを確認します。これは、一部はPuTTYの設定を構成することによるものであり、一部はTERMを通信しないプロトコル(PuTTYのtelnetサポート)ではなく、TERMを通信するプロトコル(PuTTYのsshサポートなど)を使用することによるものです。

  3. TERMが実際にあるべき値(echo $TERM)に設定されていることを確認します。

  4. そのTERM値のterminfoエントリが必要なキーを定義していることを確認してください(上記を参照)。

  5. PgUpキーが必要なものを送信することを確認します。 Vimでインサートモードに入り、を押します Ctrl+V その後 PgUp

6
RedGrittyBrick