这是要求解释或指向文档的请求。
我是 KornShell93(ksh
在 Mac OS X 或ksh93
其他地方)用户。我喜欢这个 shell,因为它作为交互式 shell 相对简单,并且具有脚本编写功能,自从 2000 年代码变得更加自由以来,我就一直在使用它。我在vi
编辑模式下使用它,并设置了vi
和viraw
选项。
有一个巧妙的功能,ksh93
允许您开始在命令行上键入命令,然后按Up-arrow从命令行历史记录中获取最新的匹配命令行。我可以找到这方面的文档以及它[count][A
在vi
编辑模式下的绑定方式,没问题。
但是,如果我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,则将使用前一个。RETURN
NEW LINE
string
^
string
string
string
[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