
Desde que completar tabulaciones se convirtió en una característica estándar en los shells, he sido un usuario muy feliz. Incluso me gusta la finalización inteligente de Bash (donde solo busca archivos PDF, si escribo evince foo<TAB>), siempre que adivine correctamente.
Arruina un día feliz cuando Bash usa su finalización inteligente para negarse a completar.
Hoy quería:
tar xvf centos5.8_x86_1.ova
Entonces entré:
tar xvf cent<TAB>
y Bash se niega a completar la ruta porque los archivos .ova no son lo que normalmente usas con tar.
Sé que puedo desinstalar el paquete bash-completion para eliminar la finalización inteligente. ¿Pero puedo quedarme con mi pastel y comérmelo también?
¿Puedo pedirle a bash que use la finalización inteligente primero y, si eso falla, entonces use la finalización no inteligente?
Respuesta1
Lo siguiente debería activar la finalización normal de bash después de que todas las finalizaciones 'inteligentes' hayan fallado para los programas tar, vim y emacs:
compopt -o bashdefault tar vim emacs
ver también elpágina relevanteen el manual de bash en línea.
Advertencia: obtiene el comportamiento normal para el tipo de finalización (comandos/nombres de archivo/nombres de usuario, etc.) definido por la finalización inteligente para el comando en cuestión; por ejemplo, la finalización para service
no completará los nombres de archivos incluso si llama a complete -o bashdefault service
.
En este y otros casos donde falla el autocompletado inteligente, siempre puedes presionar Alt-/
(o M-/
en la notación del manual de bash) para completarnombres de archivoscasi de la misma manera que TAB funciona si la finalización inteligente está deshabilitada (casi de la misma manera en el sentido de que M-/
no completa patrones como *.txt
). Veraquípara secuencias de teclas para otros tipos de completaciones, como comandos y nombres de usuarios.
Respuesta2
Hola Ole :-),
Tener tu pastel y comértelo también:
<tab>
le dará la mejor estimación de bash al finalizar. Como sabes, a veces esto está mal.
Sin embargo, M-/
( ALT
+ SHIFT
+ 7
(y eso es la izquierda ALT
, no la derecha AltGr
) en nuestros teclados daneses) forzará la finalización como un archivo para cuando la finalización de bash no sea perfecta. Entonces lo uso M-/
cuando sé que quiero forzar la finalización como un archivo.
Para mí, eso es lo mejor de ambos mundos.
Respuesta3
La finalización de bash es una extensión de la finalización estándar de bash y es en sí misma un programa bash. Entonces, si desea cambiar la forma en que actúa el programa, simplemente cámbielo. Este es un software gratuito, eres libre de hacerlo. Para el caso específico del tar
comando, el archivo es /usr/share/bash-completion/completions/tar
. Para tar
autocompletar un archivo con extensión ova
, simplemente agréguelo a la línea
local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'
entonces dice
local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'
Tenga en cuenta que esta es la ruta y el código existente para Debian Wheezy (versión estable actual). Una distro o versión diferente puede tener un código diferente pero la idea es la misma. Abra el código y ajústelo para que haga lo que desea que haga.
Editar: Me acabo de dar cuenta de que la pregunta era sobre cada vez que no encuentra una coincidencia y no solo el caso específico de agregar ova
a tar
. Quizás todavía pueda ser útil para alguien saber dónde puede buscar la fuente.