Command-Line

OpenBSD 的 ksh 中的箭頭鍵、命令行編輯、Vi 模式

  • February 28, 2018

ksh在 OpenBSD 6.2(基於pdksh)上使用預設設置,並啟用了 Vi 命令行編輯模式。

我試圖讓箭頭鍵作為h, l, jand的補充正常工作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 命令行編輯模式下確實沒有做任何事情。一個更新檔將用於修改kshOpenBSD 上的手冊,以便提及:

bind string=[editing-command] ...

Emacs 編輯模式下,指定的編輯命令被綁定到給定的string。未來的輸入string將導致立即呼叫編輯命令。 綁定在Vi 編輯模式下無效。

引用自:https://unix.stackexchange.com/questions/420388