2012-01-18 5 views
9

używamZakończenie bash - jak pozbyć się niepotrzebnych naciśnięć kart?

cur="${COMP_WORDS[COMP_CWORD]}" 

opts=`sqlite3 test.db "${QUERY[COMP_CWORD]}"` 

SAVEIFS="$IFS" 

IFS=$'\n' 

COMPREPLY=($(compgen -S"'" -P"'" -W "${opts}" $cur)) 

IFS="$SAVEIFS" 

aby możliwe warianty z bazy danych i wypełnić je z TAB. Dopóki te warianty mogą zawierać spacji, jest wygodny do autoquote im korzystania ' jako prefiks i sufiks, więc po naciśnięciu , B, TAB i istnieje tylko jeden wariant z AB prefiksu, a następnie uzyskać coś jak 'ABC DEF'.

Ale problemem jest to, że jeśli istnieje wiele wariantów następnie po , B, TAB uzyskać 'AB, potem naciśnij TAB ponownie i jest NOP, a dopiero na trzecim TAB press Dostaję możliwe uzupełnienia.

Czy istnieje sposób na zmniejszenie liczby wycinków do jednego lub co najmniej dwóch? TAB

Odpowiedz

11

Można spróbować:

bind 'set show-all-if-ambiguous on' 

Od man bash:

show-all-if-ambiguous (Off) 
      This alters the default behavior of the completion functions. If set 
      to on, words which have more than one possible completion cause the 
      matches to be listed immediately instead of ringing the bell. 
+0

idealnym rozwiązaniem. To redukuje tłoczenia TAB tylko do jednego. – sknaumov

+4

jeśli nie jest oczywiste: dodaj 'set show-all-if-ambiguous on' do ~/.inputrc, aby zrobić to automatycznie. –

Powiązane problemy