Este é um pedido de explicação ou um apontador para a documentação.
Sou um usuário do KornShell93 ( ksh no Mac OS X ou ksh93 em outro lugar). Eu gosto do shell por sua relativa simplicidade como um shell interativo e por suas capacidades de scripting, e eu tenho usado ele desde que o código foi feito mais livre em 2000. Eu o uso no modo de edição vi , com ambos os vi e viraw opções definidas.
Há um recurso interessante em ksh93 que permite que você comece a digitar um comando na linha de comando e pressione Seta para cima para obter a última linha de comando correspondente do histórico da linha de comando. Eu posso encontrar a documentação para isso e como ela está vinculada ao modo de edição [count][A in vi , sem problemas.
No entanto, se eu pressionar Seta para cima em um prompt vazio, primeiro ele me dá o comando executado mais recentemente, então ele começa a percorrer qualquer prefixo de comando que eu tenha procurado anteriormente. Isso não me incomoda.
Exemplo:
Eu executo estes três comandos:
$ ls -l
$ ls -ld test
$ ls -ld testdir
Digitar ls e depois pressionar Seta para cima três vezes irá percorrê-las na ordem oposta.
Mais tarde, com muito mais comandos emitidos, mas sem pesquisas de histórico e sem ls invocações:
$ cc -o testrun mytest.c
$ man strncmp
Se eu pressionar uma vez Seta para cima , receberei man strncmp . Se eu pressionar Seta para cima novamente, recebo ls -ld testdir e, em seguida, ls -ld test em vez do comando cc -o testrun mytest.c e, em seguida, o anterior antes disso.
Eu estou procurando por ponteiros para como "consertar" isso de modo que Seta para cima sem digitar nada na linha de comando antes percorra o histórico mais recente sem tentar procurar um prefixo usado anteriormente . Até mesmo um ponteiro para algum lugar onde o comportamento acima é documentado seria bom.
EDITAR :
O manual ksh93 diz
[count]k Fetch previous command. Each time k is entered the previous command back in time is accessed.
/string Search backward through history for a previous command containing string. String is terminated by a RETURN or NEW LINE. If string is preceded by a ^, the matched line must begin with string. If string is null, the previous string will be used.
[count][A If cursor is at the end of the line it is equivalent to / with string set to the contents of the current line. Otherwise, it is equivalent to k.
Isso não explica porque eu primeiro recebo man strncmp (como se estivesse pressionando k ) e então obtenha ls -ld testdir no meu exemplo acima. Com o texto do manual em mente, eu esperaria obter ls -ld testdir no primeiro pressionamento de Seta para cima (o que seria ainda mais irritante, a propósito).