如何映射 PageDown 和 PageUp 鍵才能正常運作

如何映射 PageDown 和 PageUp 鍵才能正常運作

vi當我使用或開啟文件時vim,我無法使用Page UpPage Down鍵導航頁面。按下這些鍵時,vim 似乎表現異常,並更改了遊標下方字元的大小寫。然後需要幾秒鐘才能再次回到insert模式。

請告訴我,如何映射這些鍵,以便按下它們時我可以像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 連接到這台機器

然後我猜對了,我下面的答案可能適用。


原答案:

您的問題中沒有足夠的資訊來確定您的問題,在我們等待的同時,讓我向觀眾提供一個小故事:

終端模擬器和編輯器

如果您使用 xterm 模擬器(例如 Putty)存取 Linux 計算機,您的 PgUp 金鑰會Escape [ 5 ~向 Linux 系統發送四個字元。

Linux 系統對此進行處理,然後將任何未執行的擊鍵傳遞給應用程式。

vim 應用程式使用系統庫(我相信)根據環境變數 TERM 的值和中的相應條目將字元序列翻譯回“鍵”terminfo

如果 terminfo 沒有將 PgUp (或任何其他鍵)定義為Escape [ 5 ~,Vim 將(可能)單獨處理這四個字元。

“許多遊標鍵代碼以 Esc 開頭。Vim 必須確定這是 Esc 鍵的單擊還是遊標鍵序列的開始。它等待下一個字符到達。如果在一秒內沒有到達假設只有一個 Esc。”所以 vim 等一下看看 Esc 是否是你想要退出插入模式。

[5是有效的 Vim 指令。但也許 Vim 將 Esc 視為它無法識別的轉義序列開始的信號 - 它必須猜測該序列的結束位置,並從該點重新開始將字元解釋為命令或資料。

~是一個 vim 指令,用來切換遊標下字元的大小寫。

一個圓滿的結局

正確設定 TERM(以符合 Putty/模擬器設定)並確保 terminfo 有 PgUp 等的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 應該可以解決您的問題

相關內容