¿Es posible hacer que Zsh deje de intentar corregir argumentos que no están destinados a ser archivos con archivos del directorio actual sin desactivar la corrección por completo o limitarla a setopt CORRECT
(solo corregir el comando)?
Por ejemplo, cuando CORRECT_ALL
se establece con setopt
, sucede esto:
gris@arefiev: ~% cd srcc
change srcc to src-nyae? n
Hasta ahora, bien (el argumento cd
debería ser un archivo). Sin embargo,
gris@arefiev: ~% man zile
change zile to .zile-nyae?
¿Qué? Esperaría que se corrija zile
cuando .zile
se man
llame con -C
la opción. También intenta corregir los parámetros del host ssh
, los primeros argumentos, sudo
etc., lo que resulta realmente molesto.
Tengo que recurrir a una muleta: configurar, alias man='nocorrect man'
etc., para cada comando afectado, pero claramente no es la mejor solución. Tampoco me gusta CORRECT
y preferiría la muleta plus CORRECT_ALL
a solo CORRECT
.
Zsh es zsh 4.3.17 (x86_64-unknown-linux-gnu)
Debian sid.
Actualizar: aquí está mi.zshrc
http://pastebin.com/67mykgRv
Respuesta1
Zsh viene con un gran conjunto de completaciones pero un conjunto más pequeño de correcciones. Hay muchos comandos para los que completar es útil pero no corregir; por ejemplo, es útil completar argumentos para mkdir
(para crear directorios dentro de directorios existentes) pero no para corregirlos. La correct_all
opción es muy dura, ya que activa la corrección en todas partes; Desafortunadamente, no existe ninguna opción para corregir únicamente cuando se proporciona un conjunto de entradas correctas.
Puede personalizar las correcciones para un comando determinado configurando elcorrections
etiquetar y personalizar si desea realizar la corrección haciendo_correct
parte dematcher-list
O no. Estos se fijan con elzstyle
incorporado.
Respuesta2
Me parece que te falta algo en tu distribución. La mayoría de las implementaciones de ZSH vienen con una gran colección de ajustes de finalización preconfigurados para ZSH que se completan de forma inteligente según la posición del comando y del argumento. Por ejemplo, en mi sistema hay unfinalizaciones de zshpaquete. Cuando se instala y se carga correctamente, man
se completa solo con los elementos que se encuentran en las páginas de manual, no con archivos, ssh
solo con nombres de host, ssh -l
se completa con los nombres de usuario del sistema, pero luego ssh -l caleb
vuelve a completar con los nombres de host, etc.
Debería investigar qué paquetes zsh están disponibles y si está cargando las configuraciones predeterminadas correctamente. No debería tener que configurar un montón de anulaciones manuales para comandos estándar como los que enumera en su pregunta.