Завершение Bash - как избавиться от ненужных нажатий на клавиши? - PullRequest
9 голосов
/ 19 января 2012

Я использую

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 . Поскольку эти варианты могут содержать пробелы, их удобно заключать в кавычки, используя ' в качестве префикса и суффикса, поэтому, когда я нажимаю A , B , TAB и есть только один вариант с префиксом AB, тогда я получаю что-то вроде 'ABC DEF'.

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

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

1 Ответ

12 голосов
/ 19 января 2012

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

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.
...