2011-12-04 6 views
6

Uso compctl -K _my_cpl ls para enganchar mi función de autocompletar al comando ls. La función devuelve una lista de nombres de un archivo de índice.¿Cómo eliminar un espacio adicional de la función de autocompletar de zsh?

Sin embargo, zsh siempre agrega un espacio después de cada finalización. Si quiero completar automáticamente el directorio de múltiples niveles, tengo que eliminar un espacio cada vez. ¿Hay alguna forma de eliminar espacio adicional como la opción -o nospace en el comando bash complete?

He probado el comando zstyle ':completion:*' add-space false y no funciona. Gracias.

_my_cpl() { 
local cur last opts 

# current word in command line. 
read -cA cur 
last=$cur[-1] 

# grep all directories and file names under current directory level. 
opts=`egrep "${last}[^/]*[$|/]*" ~/index -o |uniq` 

reply=($=opts) 
} 
compctl -K _my_cpl ls 
+0

zsh tiene un módulo bashcompinit. Puedo portar mi función completa bash a zsh como una solución alternativa. autoload bashcompinit bashcompinit – leo

Respuesta

2
compctl -K _my_cpl -S '' ls 

esto responde a la pregunta que hizo, pero puede que no sea lo suficientemente flexible como para lo que quiere hacer. En particular, este enfoque no le permite especificar un sufijo diferente para directorios y archivos regulares. Si lo desea, creo que debe cambiar al "nuevo" sistema de finalización y realizar llamadas por separado a compadd con diferentes argumentos -S.

Cuestiones relacionadas