Prezto: [Bug] ^ D enquanto o comando está sendo executado insere um espaço

Criado em 31 jan. 2018  ·  6Comentários  ·  Fonte: sorin-ionescu/prezto

Oi,

se eu pressionar ^ D durante a execução, por exemplo, sleep 10 , um espaço será acrescentado ao próximo prompt. Isso significa que é necessário fazer ^ C ^ D para fechar um terminal quando já tiver sido inserido ^ D, em vez de apenas inserir ^ D até que o comando não seja mais executado.

O problema desaparece se eu comentar esta linha: https://github.com/sorin-ionescu/prezto/blob/282b478fd2eb6658c063d4f32b9856201e5b886c/modules/editor/init.zsh#L424

Consegui reproduzi-lo com um novo usuário / pré-instalação sem nenhuma outra personalização.

zsh: 5.4.2-3 no Debian Stretch (versão do teste)
prezto: última versão

Não sei como consertar sem remover essa funcionalidade.

Comentários muito úteis

Eu geralmente removo a maior parte do que o debian faz, em seus arquivos de todo o site, no entanto, nem tudo está inchado.

eles adicionam variáveis ​​importantes em /etc/zsh/zshenv que são executadas de qualquer maneira.

Se esta for sua distribuição de escolha, você pode adicionar o seguinte aos seus dotfiles, para que não precise limpar os arquivos /etc/zsh/* ao mover seu ambiente para outra máquina ou atualizar seu sistema operacional:

.zshenv

export DEBIAN_PREVENT_KEYBOARD_CHANGES
typeset skip_global_compinit

prezto faz compinit e adiciona mapeamentos mais sensíveis mais tarde, então isso evita ter que inicializar o sistema de completação duas vezes.

.zpreztorc:

# add zrecompile to whatever is already on the line:
# zstyle ':prezto:load' zfunctions (mine looks like this):
zstyle ':prezto:load' zfunctions zargs zmv zrecompile zsh-add-hook
# internally prezto uses zargs and zmv. check man zshcontrib 
# for other useful stuff you can add here

.zlogin:

# before "compile completion dump..."
fpath=($fpath[@] /usr/share/zsh/functions /usr/share/zsh/vendor-completions )
# vendor-completions adds native zsh completion for *ugh* systemd cli utilities (journalct, systemctl, etc)
# and  functions adds native zsh completions for almost all standard Linux commands 

# after zcompile:
# autoload -Uz zrecompile # this gets done by the zstyle on .zpreztorc, uncomment if you 
# decided not to modify .zpreztorc so the function gets autoloaded here.
bashcompinit
zrecompile

parece contra-intuitivo, mas zrecompile faz algum tipo de mágica e torna a função e
a conclusão armazena em cache muito mais rápido. Basicamente, "compila" todas as funções em bytecode e os grava no cache (arquivos .zwc onde houver um diretório functions ), mas evita carregá-los na memória, então eles ainda se comportam como um carregamento lento funções (eles são carregados apenas na primeira vez que você os usa e permanecem na memória depois). Além disso, o cache é atualizado SOMENTE quando algo muda, então da próxima vez que você fizer login, todo o trabalho já estará feito e a inicialização será muito mais rápida, sem comprometer a disponibilidade dos recursos.


Outra alternativa _mais drástica_ é adicionar:

.zshenv

unsetopt GLOBAL_RCS

Isso irá efetivamente pular o carregamento de qualquer arquivo /etc/zsh/* daquele ponto em diante. No entanto, você pode querer adicionar o seguinte ao seu .zshrc :

.zshrc:

# makes completion work when doing sudo:
zstyle ':completion:*:sudo:*' command-path /usr/local/sbin \
                                           /usr/local/bin  \
                                           /usr/sbin       \
                                           /usr/bin        \
                                           /sbin           \
                                           /bin            \
                                           /usr/X11R6/bin

entretanto, nenhuma das opções acima resolverá esse problema. : rofl: ainda tenho que verificar, mas achei importante informar o que funcionou para mim nas distros derivadas do Debian nn

Todos 6 comentários

Oi ... estou tentando reproduzir o problema, sem sucesso, até agora. há muitos lugares onde os atalhos de teclado podem quebrar: Emulador de terminal, multiplexador de terminal, configuração $TERM errada, até mesmo algum software curses fazendo coisas engraçadas com stty e falhas não documentadas.

Realmente me ajudaria se você pudesse me fornecer a saída do repórter para que eu pudesse reproduzir seu ambiente localmente. (a única coisa que superaria isso é um contêiner completo ou uma caixa vagrant).

Antes de enviar ou publicar a saída de reporter , certifique-se de que nenhuma chave de API ou outros segredos tenham chegado ao script de clonagem. infelizmente não há uma maneira universal de evitar isso, pois os segredos podem ser qualquer coisa, desde variáveis ​​de ambiente a coisas codificadas. nn

Oi,
Posso reproduzir esse bug com uma imagem Debian Docker ( docker pull debian ) e seguindo as etapas normais de instalação do prezto. Você precisaria apt install zsh git antes.

Com sua configuração atual, o que acontece quando você executa ^ D enquanto o sleep 10 está em execução? Ele fecha o terminal logo após a saída do comando?

Editar (etapas para reproduzir):
Dockerfile:

FROM debian:stretch
RUN apt-get update && apt-get -y install zsh git
COPY setup.sh .
RUN ./setup.sh

setup.sh:

#!/bin/zsh
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
chsh -s /bin/zsh

Então docker build , que retorna, por exemplo, af795a7c86be , então:

docker run -it af795a7c86be
e reproduzir o bug mencionado no meu primeiro post.

Maravilhoso! Vou dar uma olhada. As distros _Debian_ e _debian-derivado_ têm várias funções para todo o site e ligações definidas em /etc/zshrc que _pode_ estar causando algum conflito com o prezto. Percebi que ao migrar meu ambiente do FreeBSD, cuja porta zsh não tem personalização em nível de site, ou seja, /etc/zsh/* estão em branco desde o início.

Pode ser, embora eu tenha olhado os arquivos em /etc/zsh , há de fato um zshrc que carrega muitas coisas, mas o bug ainda está aqui quando movo todos esses arquivos para um local diferente.

Eu olhei para os arquivos que estão instalados junto com zsh e zsh-common (dos quais zsh depende no Debian), e não parece haver outros arquivos específicos para o Debian. Mas vou deixar você dar uma olhada, espero que você possa encontrar a causa raiz.

Fico feliz que você tenha sugerido isso, porque a inicialização do meu terminal é muito mais rápida quando eu removo esses arquivos. Não tenho certeza se vale a pena abrir uma nova edição.

Eu geralmente removo a maior parte do que o debian faz, em seus arquivos de todo o site, no entanto, nem tudo está inchado.

eles adicionam variáveis ​​importantes em /etc/zsh/zshenv que são executadas de qualquer maneira.

Se esta for sua distribuição de escolha, você pode adicionar o seguinte aos seus dotfiles, para que não precise limpar os arquivos /etc/zsh/* ao mover seu ambiente para outra máquina ou atualizar seu sistema operacional:

.zshenv

export DEBIAN_PREVENT_KEYBOARD_CHANGES
typeset skip_global_compinit

prezto faz compinit e adiciona mapeamentos mais sensíveis mais tarde, então isso evita ter que inicializar o sistema de completação duas vezes.

.zpreztorc:

# add zrecompile to whatever is already on the line:
# zstyle ':prezto:load' zfunctions (mine looks like this):
zstyle ':prezto:load' zfunctions zargs zmv zrecompile zsh-add-hook
# internally prezto uses zargs and zmv. check man zshcontrib 
# for other useful stuff you can add here

.zlogin:

# before "compile completion dump..."
fpath=($fpath[@] /usr/share/zsh/functions /usr/share/zsh/vendor-completions )
# vendor-completions adds native zsh completion for *ugh* systemd cli utilities (journalct, systemctl, etc)
# and  functions adds native zsh completions for almost all standard Linux commands 

# after zcompile:
# autoload -Uz zrecompile # this gets done by the zstyle on .zpreztorc, uncomment if you 
# decided not to modify .zpreztorc so the function gets autoloaded here.
bashcompinit
zrecompile

parece contra-intuitivo, mas zrecompile faz algum tipo de mágica e torna a função e
a conclusão armazena em cache muito mais rápido. Basicamente, "compila" todas as funções em bytecode e os grava no cache (arquivos .zwc onde houver um diretório functions ), mas evita carregá-los na memória, então eles ainda se comportam como um carregamento lento funções (eles são carregados apenas na primeira vez que você os usa e permanecem na memória depois). Além disso, o cache é atualizado SOMENTE quando algo muda, então da próxima vez que você fizer login, todo o trabalho já estará feito e a inicialização será muito mais rápida, sem comprometer a disponibilidade dos recursos.


Outra alternativa _mais drástica_ é adicionar:

.zshenv

unsetopt GLOBAL_RCS

Isso irá efetivamente pular o carregamento de qualquer arquivo /etc/zsh/* daquele ponto em diante. No entanto, você pode querer adicionar o seguinte ao seu .zshrc :

.zshrc:

# makes completion work when doing sudo:
zstyle ':completion:*:sudo:*' command-path /usr/local/sbin \
                                           /usr/local/bin  \
                                           /usr/sbin       \
                                           /usr/bin        \
                                           /sbin           \
                                           /bin            \
                                           /usr/X11R6/bin

entretanto, nenhuma das opções acima resolverá esse problema. : rofl: ainda tenho que verificar, mas achei importante informar o que funcionou para mim nas distros derivadas do Debian nn

Você conseguiu reproduzir o problema?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ww7 picture ww7  ·  4Comentários

voanhduy1512 picture voanhduy1512  ·  3Comentários

sjackman picture sjackman  ·  6Comentários

EllieRagone picture EllieRagone  ·  4Comentários

askurihin picture askurihin  ·  5Comentários