Come posso lasciare bash i caratteri jolly con completamento automatico?


10

Se ho directory contenente i file

foo.bar.a.cat
foo.bar.a.hat

e digito ls f+ TABi completamenti automatici della shell bash in ls foo.bar.a.. Se scrivo ls *bar*+ TABvorrei completarlo automaticamente *bar*.a.. È possibile?

Sembra simile alla domanda

Come abilitare il completamento con schede dei caratteri jolly in bash?

ma la risposta suggerita, "funziona per me", non lo fa. Ho anche provato TAB TAB, senza alcun effetto. Il comando `` bash --version givesGNU bash, versione 4.2.37 (1) -release (x86_64-pc-linux-gnu) `.

Risposte:


14

Vuoi uno di questi:

INSERT-completamenti

ALT* per "inserisci tutti i completamenti"

In questo modo, una directory contenente il nome del file "aa ab ac ad"
ls a*seguito da alt + *verrebbe completatals aa ab ac ad

Voce della pagina man sull'associazione:

inserimenti-completamenti (M- *)

Inserire tutti i completamenti del testo prima del punto che sarebbe stato generato da possibili completamenti.

glob-expand-word

Su alcuni sistemi di cui sopra non funzionerà con wildchars, il seguente funziona su tali sistemi per me:

ctrlx, *(una combinazione a due tempi)

Esempio: ho popolato una directory con:

touch {a,b,c,d,e,f}{1,2,3,4,5,6,7,8,9,0}00{a,b,c,d,f,e}

Ho quindi ls *100*seguito ctrl + x, *, che trasforma la mia readline in:

ls a100a a100b a100c a100d a100e a100f b100a b100b b100c b100d b100e b100f c100a c100b c100c c100d c100e c100f d100a d100b d100c d100d d100e d100f e100a e100b e100c e100d e100e e100f f100a f100b f100c f100d f100e f100f

Voce della pagina man per l'associazione:

glob-expand-word (Cx *)

La parola prima del punto viene trattata come un modello per l'espansione del nome percorso e viene inserito l'elenco dei nomi file corrispondenti, sostituendo la parola. Se viene fornito un argomento numerico, viene aggiunto un '*' prima dell'espansione del nome percorso.

Man Page


Questo non funziona (almeno per me). La creazione dei file touch aa ab ac ade la digitazione ls aseguita da alt+*dà l'elenco, ma farlo con ls a*non lo fa. I caratteri jolly sono il punto della domanda.
Agganciato

@Hooked Questo funziona per me GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)e GNU bash, version 4.2.0(1)-release (x86_64--netbsd)non GNU bash, version 4.2.45(2)-release (i386-apple-darwin12.2.0). E per lavoro, intendo che è archiviato nel testo. Controllerò i miei file conf per vedere se ho qualcosa in più.
pudica

È strano, perché una cosa così semplice cambierebbe da una versione all'altra? Qualche idea su come abilitarlo o è integrato al momento della compilazione?
Agganciato

@Hooked Sono anche un po 'perplesso ... Fallisce anche sul mio raspberry pi GNU bash, version 4.2.37(1)-release (arm-unknown-linux-gnueabihf)(raspbian)
demure

@Hooked Trovato legame alliterativo che funziona su sistemi dove il primo non aveva, per me.
pudica

8

Prova ad aggiungere questo a ~ / .inputrc:

set show-all-if-ambiguous on

show-all-if-ambiguous rende premendo una volta la scheda (anziché due) per elencare tutti i completamenti. Fa anche in modo che la prima scheda prema inserisce prefissi condivisi di espressioni glob.

$ touch 1.0.{1,2}
$ echo *0* # I pressed tab once here
1.0.1  1.0.2
$ echo 1.0.

glob-complete-word (\ eg) completerebbe anche *0(senza *alla fine) in 1.0.. Completa anche per esempio /System/Library/Launch*/*Findea /System/Library/LaunchAgents/com.apple.Finder.plist.

Se si voleva convertire *a 1.0.1 1.0.2nell'esempio di cui sopra, utilizzare sia inserire-completamenti (\ e *) o glob-expand-parola (\ * Cx).


4

Questo problema è causato da bug nel pacchetto "bash-completamento".

Quando il pacchetto non è installato, bash esegue il completamento predefinito, si tratta di un motore di completamento del nome file generalizzato piuttosto buono.

Il pacchetto "bash-completamento" dovrebbe guardare al resto della linea ed essere "intelligente" sulle liste che genera. Tuttavia, non è in grado di duplicare correttamente l'espansione "glob".

Personalmente, penso che il pacchetto stia provando troppo e finisce per essere utilizzabile solo dall '"utente comune più stupido".

Tuttavia, prima di eliminarlo potresti voler controllare la parte superiore del file "/ usr / share / bash-completamento / bash_completion" per utili aggiunte al tuo .bashrc per la "regolazione grossolana" del completamento bash incorporato.

A proposito: ha oltre un centinaio di bug registrati ... https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=bash-completion


$ sudo yum cancella bash-completamento # risolto il problema per me
user2449151
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.