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).