OpenBSD 的 ksh 中的箭头键、命令行编辑、Vi 模式

OpenBSD 的 ksh 中的箭头键、命令行编辑、Vi 模式

我用的是默认的ksh在 OpenBSD 6.2 上(基于pdksh)启用 Vi 命令行编辑模式。

我试图让箭头键正常工作,作为hlj和 的补充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.cemacs.c看起来vi.cVi 模式似乎是pdkshnsh某个时候(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()bindvi.cx_bind()

因此,我认为我可以得出结论,bind在这个特定 shell 中,内置函数在 Vi 模式下是无操作的。

更新(2018-02-04):将其报告给openbsd-misc列表后,确认bind在 Vi 命令行编辑模式下确实没有执行任何操作。将会有一个补丁来修改kshOpenBSD 上的手册,以便提到这一点:

bind string=[editing-command] ...

Emacs 编辑模式,指定的编辑命令绑定到给定的string.将来输入string将会导致立即调用编辑命令。 绑定无效Vi 编辑模式

相关内容