Kus*_*nda 3 command-line ksh openbsd arrow-keys
我ksh
在 OpenBSD 6.2(基于pdksh
)上使用默认值,并启用了 Vi 命令行编辑模式。
我试图让箭头键正常工作,作为h、l、j和 的补充k(因为我使用的是德沃夏克键盘)。据我所知,它们根本不起作用。我处于“输入”模式还是“命令”模式并不重要。
当前的键绑定包括:
^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char
Run Code Online (Sandbox Code Playgroud)
如果我使用 ,这些也是我的箭头键产生的字符排序Ctrl+VArrow key。
箭头键在 Emacs 命令行编辑模式下可以正常工作,但作为一个长期使用 Vi 的用户,我在使用它时感觉有些残缺。
我的感觉是,由箭头键发送的 Escape 被解释为好像我按下了Esc...我通过手动键入获得了等效的行为,例如,Esc[A当我按下时Up-arrow(将我置于命令模式,然后在末尾处处于插入模式)线)。
问:有人能够让方向键在 OpenBSD 的 Vi 模式下直观地工作吗ksh
?
我快速涉足了/usr/src/bin/ksh
我的 OpenBSD 系统,因为我已经检查了实际的源代码。我粗略地看了一眼c_ksh.c
,emacs.c
看起来vi.c
Vi 模式似乎是pdksh
从nsh
某个时候(1989/1990 年左右)开始改装的。使用的确切词语是
/* $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
*
*/
Run Code Online (Sandbox Code Playgroud)
-ablebind
函数都位于 中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 编辑模式下无效。