Entrada de linha de comando pré-compilada em zsh

Entrada de linha de comando pré-compilada em zsh

Recentemente configurei uma máquina Ubuntu 12.04 de 64 bits. eu usotmuxcom muitas janelas abertas, todas usamzshcomo shell, alguns deles através de umchrootambiente que usa a mesma pasta pessoal do ambiente normal.

Depois de algum tempo executando comandos aleatórios nos shells (todos os tipos, mas principalmente operações de arquivo, comandos vi, build/make dentro e fora do ambiente chroot), cada shell começa a mostrar imediatamente alguns comandos pré-compilados do histórico passado, que eu preciso remover, por exemplo, com Ctrl-Q, antes que eu possa digitar qualquer coisa ou pesquisar meu histórico anterior.

O fato mais irritante é que, se eu digitar por engano algum caractere antes do comando pré-compilado, excluir a linha e digitar meu próprio comando, no próximo prompt obterei também esses caracteres extras. Essa entrada modificada cresce cada vez mais, sem nunca aparecer no arquivo de histórico zsh.

Se eu excluir o arquivo .zsh_history ou criar um novo shell, o problema será resolvido por um tempo muito curto e inexoravelmente voltará para me assombrar depois de um curto período (alguns minutos de uso do shell).

Este é um exemplo de como fica meu prompt depois de algum tempo, apenas voltando ao shell do meu comando anterior:

[10:59:14] user:Build git:(master*) $ schroot -c full32 -- antls -l

Observe que o prompt deve terminar obviamente em $, e o que se segue anté algum lixo que digitei por engano antes de excluir a linha com Ctrl-Q em uma ocorrência anterior.

Para contexto, estou usandooh-meu-zshcom ogeoffgarsidetema e ogitfastplugar. Para chroot estou usandoidiotacom a seguinte configuração:

[precise-full32]
description=Full 32bits dev environment
aliases=full32
type=directory
directory=/opt/chroot/full32
users=user
root-groups=root
personality=linux
preserve-environment=true

Estou perdendo o juízo e não consegui encontrar nenhum problema como este descrito aqui ou em outro lugar. Alguma pista sobre o que pode estar causando esse comportamento irritante?

Responder1

Suponho que você esteja usando o mapa de teclado do emacs (por meio de d'oh-my-zshalguma configuração personalizada)... verifique com

$ bindkey | grep '\^Q'
"^Q" push-line

E então... o push-linewidget foi projetado exatamente para o propósito que você descreve como irritante: eu digito um comando longo - mas esqueci alguma etapa... então eu inicio push-linevia CTRL-Q, recebo um novo prompt, faço-o bem e depois dissoRecebo meu comando digitado anteriormente (mas ainda não executado):

$ `cp /something/foo/bar to/another/long/path`  # to/another/long/path does not exist
[CTRL-Q]
$ mkdir to/another/long/path
[ENTER]
$ `cp /something/foo/bar to/another/long/path`  # appears again and I can execute it via [ENTER] without retyping

Então, longa história abreviada:

Use CTRL-Uqual é a ligação padrão kill-whole-lineou redefina CTRL-Qse você estiver acostumado com esse atalho:

$ bindkey '^Q' kill-whole-line

informação relacionada