Por que o preenchimento automático do zsh não está sendo feito usando o histórico de forma consistente do login ao login?

0

Depois de adicionar as seguintes linhas ao meu .zshrc:

autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search
bindkey "^[[B" down-line-or-beginning-search

Eu corri exec zsh (de zsh), e as linhas acima não entraram em vigor. Eu então fiz o seguinte (não tenho certeza se esse contexto é necessário, mas talvez relevante): exit para me colocar de volta no meu shell de login (bash), exit para sair, depois ssh machine para fazer login novamente, depois exec zsh e, em seguida, as linhas acima estavam funcionando.

Alguém sabe por quê?

EDITAR

A pergunta do meu título estava incorreta. Acontece que o .zsh está se comportando de forma inconsistente do login para o login em relação apenas às linhas acima. Às vezes eles funcionam como esperado, às vezes não. Eu tentei encontrar um padrão, mas não consegui. Eu acho (mas não tenho certeza) login é a chave como uma vez eu tenho ssh ed na máquina, o comportamento parece permanecer o mesmo, independentemente das diferentes instâncias zsh.

A saída de read (up) (down) é sempre a mesma que a saída de history 0 e as setas para cima e para baixo parecem se comportar.

Pode ou não ser uma informação útil - para o caso de falha (não consegui fazê-lo funcionar já há algum tempo):

%bindkey | grep 'or-beginning'
"^[[A" up-line-or-beginning-search
"^[[B" down-line-or-beginning-search
%zmodload | grep zle
zsh/zle
%up-line-or-beginning-search
up-line-or-beginning-search:zle:19: widgets can only be called when ZLE is active
up-line-or-beginning-search:zle:21: widgets can only be called when ZLE is active
%read
^[[A^[[B^C% (up,down,ctrl-c)
    
por zzxyz 09.11.2017 / 23:43

2 respostas

2

% echo echo echo >> ~/.zshrc
% exec zsh
echo
% 

Portanto, um exec zsh , na verdade, executa o echo que acabou de ser adicionado a ~/.zshrc . Talvez corra

zsh -ixc exit >grepthis 2>&1

e, em seguida, inspecione o arquivo grepthis para saber se suas linhas foram lidas ou não, ou se outras coisas relacionadas a bindkey aconteceram depois ou ...

    
por 10.11.2017 / 00:25
0

Ainda não sei por que às vezes funcionou, mas o seguinte me ajudou: link

Atingir '<ctrl-v><up>' (em vez de "^[[A" ) como a sequência de teclas corrigiu as coisas. Felizmente também funcionou no vim.

A sequência <ctrl-v><up> é imprimível, mas não pode ser diretamente tipada: 0x1B 0x4F 0x42

Além disso, (como o artigo também diz), existem ligações amigáveis para algumas das chaves mais simples que no meu sistema estão definidas em /etc/zsh/zshrc .

Então, no meu sistema, o seguinte também funciona:

bindkey "$key[Up]" up-line-or-beginning-search

    
por 10.11.2017 / 03:13

Tags