Entrada de línea de comando precompilada en zsh

Entrada de línea de comando precompilada en zsh

Recientemente configuré una máquina ubuntu 12.04 de 64 bits. yo suelotmuxcon muchas ventanas abiertas, todas usanzshcomo caparazón, algunos de ellos a través de unchrootentorno que utiliza la misma carpeta de inicio del entorno normal.

Después de un tiempo haciendo comandos aleatorios en los shells (de todo tipo, pero principalmente operaciones de archivos, vi, comandos de compilación/creación dentro y fuera del entorno chroot), cada shell comienza a mostrar inmediatamente algunos comandos precompilados del historial pasado, que necesito para eliminar, por ejemplo, con Ctrl-Q, antes de poder escribir algo o buscar en mi historial anterior.

El hecho extra molesto es que si escribo por error algún carácter que precede al comando precompilado, luego elimino la línea y escribo mi propio comando, en el siguiente mensaje también obtendré esos caracteres adicionales. Esta entrada modificada luego crece y crece, sin aparecer nunca en el archivo de historial zsh.

Si elimino el archivo .zsh_history o creo un nuevo shell, el problema se resuelve por un tiempo muy corto y luego, inexorablemente, vuelve a atormentarme después de un corto tiempo (unos minutos de uso del shell).

Este es un ejemplo de cómo se ve mi mensaje después de un tiempo, simplemente regresando al shell desde mi comando anterior:

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

Tenga en cuenta que el mensaje debería terminar obviamente en $, y lo que sigue antes algo de basura que escribí por error antes de eliminar la línea con Ctrl-Q en una aparición anterior.

Para contexto, estoy usandooh-mi-zshcon elgeoffgarsidetema y elgitfastenchufar. Para chroot estoy usandoschrootcon la siguiente configuración:

[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

Estoy al límite y no pude encontrar ningún problema como este descrito aquí o en otro lugar. ¿Alguna pista sobre qué puede estar causando este comportamiento molesto?

Respuesta1

Supongo que está utilizando el mapa de teclas de emacs (a través de d'oh-my-zshalguna configuración personalizada)... consulte con

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

Y luego... el push-linewidget está diseñado exactamente para el propósito que usted describe como molesto: escribo un comando largo, pero olvidé algún paso... así que lo inicio push-linemediante CTRL-Q, recibo un nuevo mensaje, lo hago bien y despuésRecupero mi comando previamente escrito (pero aún no ejecutado):

$ `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

Entonces, la larga historia resumida:

Utilice CTRL-Ucuál es el enlace predeterminado kill-whole-lineo redefina CTRL-Qsi está acostumbrado a ese acceso directo:

$ bindkey '^Q' kill-whole-line

información relacionada