zsh (ou talvez oh-my-zsh) a história é confundida com comandos de várias linhas

0

se eu usar a seta para cima em uma sessão zsh, como você esperaria receber comandos anteriores, do mais recente ao mais antigo. Agora (seja zsh ou oh-my-zsh fazendo isso eu não sei), mas se eu digitar o início de uma linha e clicar na seta para cima, eu obtenho as linhas do meu histórico que começam com o que eu digitei. Tudo bem até agora.

O problema ocorre se eu digitar um comando multi-line, por exemplo:

for i in foo bar
echo $i

então, se mais tarde eu clicar na seta para cima, uma vez que chegue ao comando multi line, ele só exibirá resultados começando com for . Então, se minha história for assim:

touch foo
rm foo
for i in foo bar
echo $i
ls

e eu clico na seta para cima Eu obtenho o comando ls e depois o comando multi-linha for , e dali em diante vejo apenas os comandos for que estão no meu histórico, em vez dos rm ou touch de comandos.

Existe alguma maneira de poder pesquisar cronologicamente, sem ficar preso sempre que o histórico chegar a um comando de várias linhas?

    
por stib 09.02.2014 / 13:59

1 resposta

1

O comportamento descrito é devido ao uso de up-line-or-search , que se moverá através da linha de um comando e na primeira linha de um comando irá procurar no histórico por linhas começando com a primeira palavra.

Explicação do seu problema: A partir de uma linha vazia, qualquer linha no histórico será igual. Contanto que apenas os comandos de linha única sejam encontrados, não haverá diferença no comportamento para up-history ou up-line-or-history . Mas ao atingir um comando de várias linhas, ele não está mais pesquisando, mas passando pelas linhas. Quando a linha superior é alcançada, inicia uma nova pesquisa, mas agora está procurando pela primeira palavra nesta linha, em vez de continuar a pesquisa antiga por qualquer linha.

Por padrão, Up é mapeado para up-line-or-history , que retrocede através das entradas do histórico e no caso de comandos multilinha através de cada linha. up-history também passaria pelo histórico, mas trataria comandos de várias linhas como os de linha única. Ambos forneceriam o comportamento esperado.

Eu sugeriria pesquisar sua configuração zsh e Oh-my-ZSH para a qual up-line-or-search está vinculada e substituí-la por up-line-or-history ou excluir a ligação, já que up-line-or-history é o padrão.

Além disso, dependendo do terminal usado, o seqüestro de chave para Up é ^[OA ou ^[[A . Para obter o consisten do seu shell, ambos devem ser configurados para os mesmos comandos.

    
por 13.02.2014 / 01:16