這是要求解釋或指向文件的請求。
我是 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