2012-01-18 2 views
9

Я используюЗавершение Bash - как избавиться от ненужных таблеток?

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" 

, чтобы получить возможные варианты из базы данных и заполнить их с TAB. Пока эти варианты могут содержать пробелы, это удобно, чтобы autoquote их с помощью ' в качестве префикса и суффикса, поэтому, когда я нажимаю , B, TAB и есть только один вариант с AB префиксом, то я получаю что-то вроде 'ABC DEF'.

Но проблема в том, что если есть много вариантов, то после , B, TAB я 'AB, то я нажимаю TAB еще раз, и это NOP, и только на третьем TAB press Я получаю возможные доработки.

Есть ли способ уменьшить TAB нажатием одной или меньшей двух?

ответ

11

Вы можете попробовать:

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

От 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

Идеальное решение. Это уменьшает давление TAB до одного. – sknaumov

+4

если это не очевидно: добавьте 'set show-all-if-ambiguous on' to ~/.inputrc, чтобы сделать это автоматически. –