如何编写ksh93以使用bash自动补全?

4

一个与shell相关的评论回复中,用户tinkertim表示可以轻松地使用bash自动补全库来黑掉ksh。我希望能够在AT&T的ksh93中使用bash自动补全。那应该怎么做呢?

ksh93每年都会发布新版本,因此我正在寻找一种不需要修改源代码的解决方案。ksh93可以动态链接新的C模块,而且高度可编程(我在每个按键时运行一个ksh函数),因此实际上不需要修改源代码。

注意:我不是在谈论文件名自动补全,在ksh中这很容易实现。我指的是bash执行的所有其他美味的自动补全功能,例如为nmh命令自动补全选项或自动补全Mercurial命令等。就是这些东西。

5个回答

0

我认为在客户端服务器上(我无法更改包和其他内容),最简单的方法之一是将行编辑器设置为emacs set -o emacs,然后双击ESC(ESC-ESC)。

这不是最有效的自动完成方式,但这是我在这里所拥有的,而不需要对我的.profile进行某些奇怪的黑客攻击,可能会违反使用规则。


0
除了set -o emacs之外,还有set -o vi,它激活键盘组合键ESC-\以进行文件名自动完成。(ESC进入命令模式,\启用自动完成以尽可能完成文件名。)当然,set -o vi还启用了vi风格的命令行编辑,具有命令模式和插入模式两种模式。
我承认这并没有回答您最初关于在ksh中模拟bash样式自动完成的问题,但至少您现在知道了另一种激活ksh内置自动完成的方法。
我还注意到这里有另一个帖子,其中包含一些相关的ksh自动完成信息,包括使用ESC-=获取选择列表:链接文本

1
在ksh中,文件名的自动补全没有问题。我想要的是其他自动补全功能,比如能够自动补全cvs命令等等。 - Norman Ramsey

0

0

有一个Readline包装器,rlwrap。也许您的系统已经有了一个软件包。

它位于您启动的程序的标准输入之上,可配置且稍微可编程,可以保留历史记录。

我通常用它来处理Oracle SQL*Plus之类的东西。

它可能是您正在寻找的工具,也可能不是,您需要检查一下。


rlwrap 看起来对其他问题非常有用,但它的自动完成功能很少。 - Norman Ramsey
无论如何,如果有一些特殊字符,它都会与KSH的输入能力发生冲突。 - TheBonsai

-1

尝试按ESC,然后按'\'键。它应该模仿bash的自动完成功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接