Forza il completamento normale della scheda Bash se il completamento intelligente non riesce


10

Da quando il completamento delle schede è diventato una funzionalità standard nelle shell, ne sono stato molto contento. Mi piace persino il completamento intelligente di Bash (dove cerca solo file PDF, se digito per <TAB>) - purché indovini correttamente.

Rovina un giorno altrimenti felice quando Bash usa il suo completamento intelligente per rifiutare il completamento.

Oggi volevo:

tar xvf centos5.8_x86_1.ova

Quindi ho inserito:

tar xvf cent<TAB>

e Bash si rifiuta di completare il percorso perché .ova-files non è quello che di solito usi con tar.

So di poter disinstallare il pacchetto bash-completamento per rimuovere il completamento intelligente. Ma posso avere la mia torta e mangiarla anche io?

Posso chiedere a bash di utilizzare prima il completamento intelligente e, in caso contrario, utilizzare il completamento non intelligente?


1
<spam> Zsh può farlo. </spam>
Gilles 'SO- smetti di essere malvagio' il

Risposte:


9

Quanto segue dovrebbe attivare il normale completamento bash dopo che tutti i completamenti "intelligenti" non sono riusciti per i programmi tar, vim ed emacs:

compopt -o bashdefault tar vim emacs

vedere anche la pagina pertinente nel manuale bash online.

Avvertenza: si ottiene il comportamento normale per il tipo di completamento (comandi / nomi file / nomi utente ecc.) Definito dal completamento intelligente per il comando in corso, ad esempio, il completamento per servicenon completerà i nomi dei file anche se si chiama complete -o bashdefault service.

In questo e in altri casi in cui il completamento automatico intelligente non riesce, è sempre possibile premere Alt-/(o M-/nella notazione del manuale bash) per completare i nomi dei file quasi nello stesso modo in cui funziona TAB se il completamento intelligente è disabilitato (quasi allo stesso modo nel senso che M-/non schemi completi come *.txt). Vedi qui per le sequenze di tasti per altri tipi di completamenti come comando e nomi utente.


2
Grazie per l'Alt / menzione, non avevo idea che ci fosse
Michael Speer,

1

Il completamento di bash è un'estensione del completamento standard di bash ed è esso stesso un programma bash. Quindi, se vuoi cambiare il modo in cui il programma agisce, basta cambiarlo. Questo è un software gratuito, sei libero di farlo. Per il caso specifico del tarcomando, il file è /usr/share/bash-completion/completions/tar. Per tarcompletare automaticamente un file con estensione ova, basta aggiungerlo alla riga

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

così dice

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

Si noti che questo è il percorso e il codice esistente per Debian Wheezy (l'attuale versione stabile). Una distro o versione diversa può avere un codice diverso ma l'idea è la stessa. Apri il codice e modificalo per fare ciò che desideri.

Edit: Ho appena notato che la questione era di circa ogni volta che non si trova una corrispondenza, e non solo il caso specifico di aggiunta ovaa tar. Forse può ancora essere utile a qualcuno, sapere dove possono cercare la fonte.


4
La modifica dei file in / usr di proprietà del gestore pacchetti è un buon modo per provocare un brutto shock durante l'aggiornamento. Meglio: sovrascrivere la configurazione in pacchetto.
Chris Down,

1
@ChrisDown e come lo faresti? Sto ancora cercando la soluzione pulita .bashrc.
Clayton Stanley,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.