OpenBSD 的 ksh 中的箭頭鍵、命令行編輯、Vi 模式
我
ksh
在 OpenBSD 6.2(基於pdksh
)上使用預設設置,並啟用了 Vi 命令行編輯模式。我試圖讓箭頭鍵作為
h
,l
,j
and的補充正常工作k
(因為我在 Dvorak 鍵盤上)。據我所知,它們根本不起作用。不管我是處於“輸入”還是“命令”模式。目前的鍵綁定包括:
^[[A = up-history ^[[B = down-history ^[[C = forward-char ^[[D = backward-char
如果我使用,這些也是我的箭頭鍵產生的字元序列
Ctrl+V``Arrow key
。方向鍵在 Emacs 命令行編輯模式下按預期工作,但是作為一個長期使用 Vi 的使用者,我在使用它時感覺有些瘸子。
我的感覺是箭頭鍵發送的 Escape 被解釋為好像我按下
Esc
了……我通過手動輸入獲得了等效的行為,例如Esc``[``A
當我按下時Up-arrow
(將我置於命令模式,然後線上)。問題:有沒有人能夠讓箭頭鍵在 OpenBSD 的 Vi 模式下直覺地工作
ksh
?
/usr/src/bin/ksh
我對我的 OpenBSD 系統做了一個快速的嘗試,因為我已經檢查了實際的原始碼。我粗略地看了一眼c_ksh.c
,看起來好像 Vi 模式是從某個時間點(大約 1989/1990 年)改型的。使用的確切詞是emacs.c``vi.c``pdksh``nsh
/* $OpenBSD: vi.c,v 1.55 2018/01/16 22:52:32 jca Exp $ */ /* * vi command editing * written by John Rochester (initially for nsh) * bludgeoned to fit pdksh by Larry Bouzane, Jeff Sparkes & Eric Gisin * */
bind
-able函式都存在emacs.c
於. _x_bind()``bind``vi.c``x_bind()
因此,我想我可以得出結論,
bind
在這個特定的 shell 中,內置函式在 Vi 模式下是無操作的。更新(2018-02-04):在向
openbsd-misc
列表報告後,確認bind
在 Vi 命令行編輯模式下確實沒有做任何事情。一個更新檔將用於修改ksh
OpenBSD 上的手冊,以便提及:
bind string=[editing-command] ...
在Emacs 編輯模式下,指定的編輯命令被綁定到給定的
string
。未來的輸入string
將導致立即呼叫編輯命令。 綁定在Vi 編輯模式下無效。