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 ant
es 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-zsh
alguna configuración personalizada)... consulte con
$ bindkey | grep '\^Q'
"^Q" push-line
Y luego... el push-line
widget 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-line
mediante 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-U
cuál es el enlace predeterminado kill-whole-line
o redefina CTRL-Q
si está acostumbrado a ese acceso directo:
$ bindkey '^Q' kill-whole-line