Терминал автозаполнения: цикл через предложения

37

У меня было это в моей настройке Ubuntu, и так как я перешел на Fedora, я хочу установить его, и я забыл, как ... Идея проста:

Я не хочу, чтобы терминал показывал мне предложения, когда я удваиваюсь tab, вместо этого я хочу, чтобы он циклически просматривал все возможные предложения при каждом нажатии tab... это можно сделать и в Vim.

Поэтому, когда я набираю текст gedit aи нажимаю, tabон показывает мне каждый файл с первой буквой a.

vanjadjurdjevic
источник
unix.stackexchange.com/questions/24419/…
Сиро Сантилли 新疆 16 中心 法轮功 六四 事件

Ответы:

51

На самом деле это функция readline называется menu-complete. Вы можете привязать его к вкладке (заменив по умолчанию complete), выполнив:

bind TAB:menu-complete

Вы, вероятно, хотите добавить это к вашему ~/.bashrc. Кроме того, вы можете настроить его для всех завершений readline (не только bash) в ~/.inputrc.

Вы также можете найти полезными bind -p(показать текущие привязки, обратите внимание, что вкладка отображается как "\C-i") и bind -l(перечислить все функции, которые можно связать), а также раздел редактирования строки руководства bash и документацию readline .

derobert
источник
3
@vanjadjurdjevic: Конечно, просто свяжите их с разными ключами.
Дероберт
4
menu-completeэто круто, но он скрывает список всех возможных предложений ;-( Можно ли как увидеть список, так и
пролистать
2
@CiroSantilli 轩 事件 法轮功 包 卓 轩 Мне также нравится эта функция в оболочках на основе readline. В настоящее время zsh способ сделать это очень круто: первое нажатие на вкладку показывает все возможности, второе нажатие на вкладку начинает циклическое выполнение элементов завершения.
xuhdev
1
Давайте предположим, что вы используете cdи menu-completeи езда на велосипеде через каталоги. Какую клавишу вы нажимаете, чтобы «выбрать» этот каталог и начать циклическое повторение содержимого этого каталога? Есть ли что-то, что можно установить / связать?
Тони
1
@ Тони, да, это вставит. Но если вы используете прямую косую черту, все в порядке - путь, подобный " /usr/local//", все еще совершенно допустим, и он начнет заполнять меню изнутри /usr/local.
Дероберт
6

Вы можете переключаться между меню завершения в Bash, и вы также можете показать меню пунктов. В отличие от Zsh, текущий пункт меню не будет выделен.

Добавить к ~/.inputrc:

set show-all-if-ambiguous on
set show-all-if-unmodified on
set menu-complete-display-prefix on
"\t": menu-complete
"\e[Z": menu-complete-backward

Документация от man bash:

Readline Variables
    menu-complete-display-prefix (Off)
           If set to On, menu completion displays the common prefix of the
           list of possible completions (which may be empty) before cycling
           through the list.
    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.
    show-all-if-unmodified (Off)
           This alters the default behavior of the completion functions in
           a fashion similar to show-all-if-ambiguous. If set to On, words
           which have more than one possible completion without any
           possible partial completion (the possible completions don't
           share a common prefix) cause the matches to be listed
           immediately instead of ringing the bell.

Completing
    menu-complete
          Similar to complete, but replaces the word to be completed with
          a single match from the list of possible completions. Repeated
          execution of menu-complete steps through the list of possible
          completions, inserting each match in turn. At the end of the list
          of completions, the bell is rung (subject to the setting of
          bell-style) and the original text is restored. An argument of
          n moves n positions forward in the list of matches; a negative
          argument may be used to move backward through the list. This
          command is intended to be bound to TAB, but is unbound by
          default.
    menu-complete-backward
          Identical to menu-complete, but moves backward through the list
          of possible completions, as if menu-complete had been given
          a negative argument. This command is unbound by default.
gmarmstrong
источник