Pregunta

Pregunta: Tengo una pregunta que es aparentemente no respondida por este pedido ya preguntas finalización Bash desbordamiento de pila. La pregunta es, cómo llegar hasta la terminación del golpe de alias (para cualquier alias) en una subcadena parcial.

Ejemplo: Por ejemplo, supongamos que tengo los siguientes alias:

open.alicehome="cd /usr/home/alice"
open.bakerhome="cd /usr/home/baker"
open.charliehome="cd /usr/home/charlie"
gohomenow="shutdown -now"

Me gustaría escribir con pereza simplemente "panadero {{TAB}}" para invocar el segundo alias.

Me gustaría perezosamente sólo tiene que escribir "casa {{TAB}}" para obtener una lista de todos los alias anteriores que entonces puedo elegir con el teclado (óptimo) o elegir escribiendo una subcadena inequívoca que distingue entre las tres opciones (inferior al óptimo).

.. O ..

Me gustaría perezosamente sólo tiene que escribir "casa" y luego presione repetidamente {{TAB}} hasta que el alias específico Quiero aparece, a continuación, pulse ENTER {{}} para ejecutarlo.

No dude en ser creativo: Si usted tiene una manera de hacer esto, incluso si requiere recurrir a hackery gurú extrema, por favor compartirlo y no dude en explicar su hackery gurú al nivel de un niño de cinco años de edad, sin que se tenga que tratar de poner en práctica su idea de sí mismo.

Los enlaces a páginas web o RTFMs existentes son bienvenidos.

¿Fue útil?

Solución

Puede generar las coincidencias para una subcadena especificada con compgen -c -X'!*substring*'

Para incluir esto en la terminación automática fiesta puede crear un archivo .bash_completion en su directorio que contiene algo como esto:

_comp() {
    local cur

    cur=${COMP_WORDS[$COMP_CWORD]}

    COMPREPLY=( $( compgen -c -X '!*'$cur'*' ) )

}
complete -F _comp $nospace eval

Esta función de correspondencia se ejecutará cuando se pulsa <TAB> en los argumentos al comando eval. No he encontrado una manera de incluir una nueva función de emparejamiento de la primera búsqueda de comandos en bash, sólo he encontrado documentación sobre cómo añadir terminaciones personalizadas para un comando específico, como <=> anteriormente.

Pero yo soy un poco escéptico de lo útil que es ... No hay forma sencilla de seleccionar cual de los ajustes que desee de la lista.

Otros consejos

Si realmente desea cambiar el comportamiento bash pestaña 's,

# ~/.inputrc
# The default binding for [Tab] is ``complete'', which is what we're used to.
# ``menu-complete'' gives you irssi-like behavior: cycle through completions.
"\t": menu-complete

Esto está documentado en El GNU Readline Readline Biblioteca # Dejando Para usted .

Probablemente se puede lograr lo que quiere con los ajustes bash_completion costumbre, pero yo no voy a hacer el trabajo para usted, ¿de acuerdo? : -)

Si usted no sabe lo que estoy hablando, consulte aquí y aquí para más detalles. Por cierto, que iba a encontrar muy molesto este

  

Me gustaría simplemente escriba perezosamente   "Inicio" y luego presione repetidamente   {{TAB}} hasta que el alias I específica   desee aparece, a continuación, pulse ENTER {{}} para   ejecutarlo.

que creo que es el estilo de M $ de "terminación" (¿vas a venir para el entorno DOS / Windows?)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top