2010-08-09 9 views
68

yo sólo comenzó a usar Zsh últimamente para algunos de los soporte integrado en el intérprete de comandos de Git para mi estado, etc.Zsh quiere Autocorrect un comando, con una _ antes de que

cuando escribo en:

ruby -v 

para confirmar la versión de ruby ​​que estoy ejecutando, Zsh pregunta si deseo cambiar el comando a _ruby. Después de decir no en el aviso y completar el comando como se esperaba, sigo obteniendo la pregunta en el aviso después de confirmar que mi comando es correcto.

Supongo que hay un archivo de finalización o algo por el estilo.

Gracias

Actualización:

La cáscara ya no está tratando de completar _ruby, dejó de responder después de cerrar la cáscara de un par de veces de alguna forma.

He intentado limpiar el archivo varias veces pero hay una variable "opta" que tiene 50 o más líneas de longitud y las líneas se ejecutan juntas, algunas líneas tienen más de 150 caracteres. Tal vez podría enviarte un archivo adjunto si aún quieres verlo. Me disculpo sinceramente por la publicación desordenada.

+0

No veo que el comportamiento. ¿Qué versión de zsh? ¿Qué hay en tu '~/.zshrc'? ¿Lo hace si intenta ejecutar un simple script CLI de ruby ​​(por ej., 'Ruby -e 'print" hi \ n "'')? Publique su archivo '/ usr/share/zsh/functions/Completion/Unix/_ruby' y podemos compararlo con una versión conocida. –

+0

¿Qué hay de las otras preguntas que hice? No entiendo, ¿sigues teniendo el problema? Si quiere que alguien esté seguro y vea sus seguimientos, envíe un comentario a @username diciendo algo así como "vea la pregunta editada" si la información en sí es demasiado larga para caber en el comentario. Eso ilumina el icono de notificación del usuario (el pequeño sobre en la parte superior de la página). –

+0

@Dennis Williamson Resulta que la respuesta de Gilles es correcta. Creo que se corrigió después de reiniciar el shell o cerrar la sesión. No estaba seguro si me desconecté o no. "No entiendo, ¿sigues teniendo el problema?" Como dije en la publicación, el comando ruby ​​se ejecutaría después de que opté por dejar que zsh lo cambiara a _ruby. Entonces sí, todo está funcionando. Gracias por el encabezado –

Respuesta

108

Esta es la autocorrección del comando, activada por la opción correct. No tiene nada que ver con la finalización. Está viendo _ruby porque zsh piensa que no hay ningún comando ruby y ofrece _ruby como la coincidencia existente más cercana.

Si acaba de instalar ruby, es posible que zsh haya memorizado la lista de comandos disponibles anteriormente, y no siempre tratará de ver si el comando ha aparecido en el medio. En ese caso, ejecute hash -rf. Las futuras sesiones de zsh no tendrán este problema ya que el comando ruby ya existía cuando comenzaron.

A veces, cuando cambia su PATH, zsh olvida algunos comandos hash. La opción hash_listall ayuda a evitar esto. Como se indicó anteriormente, si puede forzar zsh para actualizar su caché de comando con hash -rf.

+0

eso es definitivamente lo que estaba pasando. Parece que se corrigió después de un tiempo. Puede haber reiniciado el shell o desde el cierre de sesión. No recuerdo si me desconecté, así que no quiero decir que se corrigió solo reiniciando el shell. Lo único que me desconcierta es cómo el comando se completa con éxito al optar por dejar que zsh lo modifique. Supongo que cuando dijiste que tenía algo que ver con el shell no "sabías" que el comando Ruby estaba disponible en ese momento. Gracias por la respuesta –

+0

En una nota lateral, estoy usando zsh 4.3.12 (i386-apple-darwin11.0.0) y 'hash_listall' no se encuentra. Sin embargo 'hash -rf' resolvió mi problema con zsh constantemente queriendo autocorregir algo que instalé recientemente. – recursive

+8

Tengo este problema con mi git-alias 'git lg' que zsh cree que debería ser' git log'. Hay una razón por la que lo llamo 'lg' y es porque es similar a' log', ¡porque su función es similar! ¿Cómo arreglar este problema? Realmente no quiero desarrollar el hábito de presionar Enter dos veces. –

14

Encuentro que la función de autocorrección a veces puede ser molesta. Así que me gusta hacer en tu ~/.zshrc,

DISABLE_CORRECTION="true" 
+1

Mejor aún, cree alias para activar y desactivar la corrección automática, porque * la mayoría de las veces, la quiere, especialmente si está usando una gran cantidad de complementos. –

18

Se podría hacer un alias:

alias ruby='nocorrect ruby'

Es lo que hice cuando zsh me preguntaban si quería decir .meteor cuando he escrito meteor porque la autocorrección sigue siendo útil de vez en cuando. Hace

+1

Encuentra fácilmente este el más útil – netpoetica

+1

Esta debería ser la respuesta, muchas gracias – Drew

1

algún momento después de una actualización, llegué comando auto-corrección habilitar la que no quiero. Si le sucedió lo mismo y desea revertirlo, en el ~ /.zshrc archivo que va a tener que hacer:
# Uncomment the following line to enable command auto-correction.
ENABLE_CORRECTION="false"

o comentar como por abajo:
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"

Cuestiones relacionadas