Estoy buscando obtener la finalización de tabulación en mis alias de línea de comandos, por ejemplo, digamos que definí el siguiente alias:
alias apt-inst='sudo aptitude install'
¿Hay alguna forma de obtener las finalizaciones proporcionadas por aptitude cuando presiono la tecla tab? es decir, cuando escribo 'sudo aptitude install gnumer' y presiono tab, aptitude completa esto en gnumeric, o si hubo incertidumbre, enumera todos los paquetes disponibles que comienzan con gnumer. Si lo hago usando mi alias, nada, sin completar.
bash
alias
autocomplete
levesco
fuente
fuente
Respuestas:
Hay un gran hilo sobre esto en los foros de Ubuntu . Ole J propone la siguiente función de definición de finalización de alias:
Úselo para definir una función de finalización para su alias, luego especifique esa función como completadora para el alias:
Prefiero usar alias para agregar argumentos siempre usados a los programas existentes. Por ejemplo, con
grep
, siempre quiero omitir dispositivos y archivos binarios, así que hago un alias paragrep
. Para agregar nuevos comandos comogrepbin
, utilizo un script de shell en mi~/bin
carpeta. Si esa carpeta está en su camino, se completará automáticamente.fuente
complete -o default -F ...
lugar decomplete -F ...
hacer que cosas como la finalización automática del nombre de archivo funcionaran correctamente al pasar args (Bash 4.3.46).Pruebe complete-alias , que resuelve este problema exactamente.
Después de instalarlo, puede usar una función genérica para completar muchos alias como este:
Es posible que desee obtener el archivo complete_alias en cada instancia de bash a través de
.bash_profile
o similar.instalación
solicitud
container
ahora puede ser completado automáticamente por el_docker()
controlador de finalización original ;fuente
Respuesta 2018
Debe agregar su alias al programa 'completo'. Dependiendo del tipo de autocompletado que desee lograr, debe usar -c o -F.
Para autocompletar paquetes:
Para el autocompletado de comandos:
Para verificar si su alias se agregó correctamente:
Finalmente, para eliminar un alias de 'complete':
En tu caso:
fuente
complete -F xxx
no funciona en OSX (solo muestra el usocomplete: usage: complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...]
). ¿Tienes algún puntero? Gracias.Aquí está el código de la respuesta de Shawn J. Goff con algunas mejoras:
shell-check
, por ejemplo, el primero"
de"$@"
hecho terminó la cadena de definición de función.return 0
para que el valor de retorno de la función subyacente se pueda devolver al llamador..
fuente
COMP_WORDS
matriz. Si usamosmake-completion-wrapper _apt_get _apt_get_install apt-get install
como ejemplo, despuésshift 2
,$@
contieneapt-get install
. La definición de la función incluyeapt-get install
(las dos palabras literales) al asignarCOMP_WORDS
.Como una extensión de la respuesta @Giles, la siguiente función de conveniencia nombra automáticamente el contenedor generado por
make-completion-wrapper
para permitir definir la finalización en una línea:fuente