我用的是默认的ksh
在 OpenBSD 6.2 上(基于pdksh
)启用 Vi 命令行编辑模式。
我试图让箭头键正常工作,作为h、l、j和 的补充k(因为我使用的是德沃夏克键盘)。据我所知,它们根本不起作用。我处于“输入”模式还是“命令”模式并不重要。
当前的键绑定包括:
^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char
如果我使用 ,这些也是我的箭头键产生的字符排序Ctrl+VArrow key。
箭头键在 Emacs 命令行编辑模式下可以正常工作,但作为一个长期使用 Vi 的用户,我在使用它时感觉有些残缺。
我的感觉是,由箭头键发送的 Escape 被解释为好像我按下了Esc...我通过手动键入获得了等效的行为,例如,Esc[A当我按下时Up-arrow(将我置于命令模式,然后在末尾处处于插入模式)线)。
问:有人能够让方向键在 OpenBSD 的 Vi 模式下直观地工作吗ksh
?
答案1
我快速涉足/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
*
*/
-able函数bind
都位于 中,就像由内置函数调用的函数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 编辑模式。