ksh93 中空提示符处的向上箭头

ksh93 中空提示符处的向上箭头

这是要求解释或指向文档的请求。

我是 KornShell93(ksh在 Mac OS X 或ksh93其他地方)用户。我喜欢这个 shell,因为它作为交互式 shell 相对简单,并且具有脚本编写功能,自从 2000 年代码变得更加自由以来,我就一直在使用它。我在vi编辑模式下使用它,并设置了viviraw选项。

有一个巧妙的功能,ksh93允许您开始在命令行上键入命令,然后按Up-arrow从命令行历史记录中获取最新的匹配命令行。我可以找到这方面的文档以及它[count][Avi编辑模式下的绑定方式,没问题。

但是,如果我Up-arrow在空提示符下按,它首先会给出最近执行的命令,然后它开始循环遍历我之前查找的任何命令前缀。这让我烦恼不已。

例子:

我执行这三个命令:

$ ls -l
$ ls -ld test
$ ls -ld testdir

键入ls然后按Up-arrow三下将以相反的顺序循环浏览它们。

后来,发出了更多命令,但没有历史搜索,也没有ls调用:

$ cc -o testrun mytest.c
$ man strncmp

如果我现在按Up-arrow一次,我会得到man strncmp。如果我Up-arrow再次按下,我会得到ls -ld testdir然后,ls -ld test而不是命令cc -o testrun mytest.c然后是之前的命令。

我正在寻找有关如何“修复”此问题的指针,以便Up-arrow无需事先在命令行上输入任何内容,即可循环浏览最近的历史记录,而无需尝试搜索以前使用过的前缀。即使是指向记录上述行为的地方的指针也会很好。

编辑:

手册ksh93

[count]k 获取上一个命令。每次k输入时都会访问之前的命令。

/string 在历史记录中向后搜索包含 的上一个命令string。 由或String终止。如果前面有 a ,则匹配的行必须以 开头。如果为 null,则将使用前一个。RETURNNEW LINEstring^stringstringstring

[count][A 如果光标位于行尾,则相当于 / 设置string为当前行的内容。否则,它相当于k

这确实不是解释一下为什么我第一的得到man strncmp(就像按k)和然后进入ls -ld testdir我上面的例子。考虑到手册的内容,我希望ls -ld testdir第一次按下Up-arrow(顺便说一句,这会更烦人)。

答案1

事实证明这是有记录的行为。来自 ksh93 手册页:

搜索编辑命令这些命令访问您的命令历史记录。

[count]k 获取上一个命令。每次输入 k 时,都会访问之前的命令。

[count]- 相当于k。

[count][A如果光标位于行尾,则相当于 /with细绳设置为当前行的内容。否则,它相当于k

[count]j 获取下一个命令。每次j输入时都会访问下一个向前的命令。

/细绳 在历史记录中向后搜索包含的上一个命令细绳细绳由新行终止RETURN' or。如果细绳前面有 a ^,匹配的行必须以细绳。如果细绳为 null,将使用之前的字符串。

注意:输入字符串后使用向上箭头时,搜索字符串将是锚定的到行的开头,就像^在前面输入的一样。

例子:

$ ls[Up-Arrow]

相当于

$ [ESC]/^ls

相关内容