
vi
當我使用或開啟文件時vim
,我無法使用Page Up和Page 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 沒有任意鍵映射功能(我認為它在願望清單中)所以...
配置 Putty 以模擬眾所周知且定義明確的終端類型。不幸的是,沒有任何這樣的東西,所以像 xterm 這樣的東西必須要做。
確保 Putty 告訴 Linux 機器它正在模擬什麼終端類型。部分是透過配置 Putty 的設置,部分是透過使用一種可傳遞 TERM 的協定(例如 Putty 的 ssh 支援)而不是不傳遞 TERM 的協定(Putty 的 telnet 支援)。
確保 TERM 實際上設定為應有的值 (
echo $TERM
)。確保該 TERM 值的 terminfo 條目定義了您想要的鍵(請參閱上文)。
確保 PgUp 鍵發送應有的資訊。在Vim中進入插入模式並按Ctrl+V然後PgUp
答案2
export TERM=xterm 應該可以解決您的問題