Entrada de linha de comando pré-compilada no zsh

1

Eu recentemente instalei uma máquina de 64 bits do Ubuntu 12.04. Eu uso tmux com muitas janelas abertas, todas elas usam zsh como shell, algumas delas através de um ambiente chroot que usa a mesma pasta home do ambiente normal.

Depois de algum tempo fazendo comandos aleatórios nos shells (todos os tipos, mas principalmente operações de arquivo, vi, comandos build / make dentro e fora do ambiente chroot), cada shell começa mostrando 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 todos os caracteres que estiverem comandando o comando pré-compilado, exclua a linha e digite meu próprio comando, no próximo prompt também receberei os caracteres extras. Esta entrada modificada cresce e cresce, sem nunca aparecer no arquivo do histórico do zsh.

Se eu deletar o arquivo .zsh_history, ou criar um novo shell, o problema é resolvido por um tempo muito curto e então inexoravelmente volta para me assombrar depois de um tempo (alguns minutos de uso do shell).

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

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

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

Para o contexto, estou usando oh-my-zsh com o tema geoffgarside e o plug-in gitfast . Para o chroot, estou usando o schroot com 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 atento e não encontrei nenhum problema como este descrito aqui ou em outro lugar. Alguma pista sobre o que pode estar causando esse comportamento irritante?

    
por djinn.rtl 04.12.2013 / 11:12

1 resposta

0

Suponho que você esteja usando o mapa de teclado do emacs (via d'oh-my-zsh ou alguma configuração personalizada) ... por favor, verifique com

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

E então ... o widget push-line é exatamente projetado para o propósito que você descreve como chato: eu digito um longo comando - mas eu esqueci algumas etapas ... então eu inicio push-line via CTRL-Q , Recebo um novo prompt, bom e depois disso eu recebo meu comando anteriormente digitado (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 curta:

Use CTRL-U , que é a ligação padrão para kill-whole-line ou redefina CTRL-Q se você estiver acostumado a esse atalho:

$ bindkey '^Q' kill-whole-line
    
por 04.12.2013 / 20:30