Zsh: autocorrección más inteligente

Zsh: autocorrección más inteligente

¿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_ALLse establece con setopt, sucede esto:

 gris@arefiev: ~% cd srcc 
change srcc to src-nyae? n

Hasta ahora, bien (el argumento cddebería ser un archivo). Sin embargo,

 gris@arefiev: ~% man zile
change zile to .zile-nyae? 

¿Qué? Esperaría que se corrija zilecuando .zilese manllame con -Cla opción. También intenta corregir los parámetros del host ssh, los primeros argumentos, sudoetc., 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 CORRECTy preferiría la muleta plus CORRECT_ALLa 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_allopció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 elcorrectionsetiquetar y personalizar si desea realizar la corrección haciendo_correctparte dematcher-listO no. Estos se fijan con elzstyleincorporado.

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, manse completa solo con los elementos que se encuentran en las páginas de manual, no con archivos, sshsolo con nombres de host, ssh -lse completa con los nombres de usuario del sistema, pero luego ssh -l calebvuelve 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.

información relacionada