Aquí es una cuestión relacionada y otra solución sugerida:
How to reset COMP_WORDBREAKS without effecting other completion script?
Como se dijo antes, la solución más simple es el de alterar COMP_WORDBREAKS
. Sin embargo, modificar COMP_WORDBREAKS
en su script de finalización no es seguro (ya que es una variable global y tiene el efecto secundario de afectar el comportamiento de otros scripts de finalización, por ejemplo, scp).
Por lo tanto, bash completion ofrece algunos métodos de ayuda que puede utilizar para lograr su objetivo de una manera mejor y más segura. se añadieron
Dos métodos de ayuda en Bash completion 1.2 para esto:
_get_comp_words_by_ref
con la opción -n EXCLUDE
- hace correr la voz-a-completa sin tener en cuenta los caracteres en EXCLUDE como palabra rompe
__ltrim_colon_completions
lo tanto, aquí es un ejemplo básico de cómo un mango de dos puntos (:) en las palabras de conclusión:
_mytool()
{
local cur
_get_comp_words_by_ref -n : cur
# my implementation here
__ltrim_colon_completions "$cur"
}
complete -F _mytool mytool
Utilizando los métodos de ayuda simplifica también el guión terminación y garantiza que obtendrá el mismo comportamiento en cualquier entorno (bash-3 o bash-4).
También puede echar un vistazo a man
o perl
los guiones de terminación en /etc/bash_completion.d
para ver cómo se utilizan los métodos de ayuda anteriores para resolver este problema.
¡Gracias! Esto me ha estado molestando por algún tiempo :) – armandino
Una advertencia de que probablemente no deberías hacer eso, ya que rompe las funciones de finalización que dependen del comportamiento predeterminado (como scp). Consulte https://bugs.launchpad.net/gvfs/+bug/290784 para discusión – gfxmonk
Acepte @gfxmonk, esto no es apropiado, ya que se completa para otras funciones –