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

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

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

Ctrlこれらのキーをマッピングして、 + ( f/ b/ u/ d )のように押すとページをスムーズにスクロールできるようにする方法を教えてください。

アップデート

マシンと 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 を使用しています。

答え1

アップデート:

このマシンに接続するために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 はそのシーケンスが終了する場所を推測し、その時点から文字をコマンドまたはデータとして解釈し直す必要があります。

~カーソルの下の文字の大文字と小文字を切り替える 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 の ssh サポート) ではなく、TERM を通信しないプロトコル (Putty の telnet サポート) を使用することによって部分的に行われます。

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

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

  5. PgUpキーが正しい送信内容を送信することを確認します。Vimで挿入モードに入り、Ctrl+を押してVからPgUp

答え2

export TERM=xterm で問題は解決するはずです

関連情報