Completamento automatico del terminale: scorrere i suggerimenti


37

Ho avuto questo sulla mia configurazione di Ubuntu e da quando sono passato a Fedora voglio impostarlo e ho dimenticato come ... L'idea è semplice:

Non voglio che il terminale mi mostri suggerimenti quando raddoppio tab, ma voglio che scorra ogni possibile suggerimento con ogni pressione su tab... questo può essere fatto anche in Vim.

Quindi quando scrivo gedit ae premo tabmi mostrerà ogni file con una prima lettera a.


Risposte:


51

Questa è in realtà una funzione readline chiamata menu-complete. Puoi associarlo alla scheda (sostituendo il valore predefinito complete) eseguendo:

bind TAB:menu-complete

Probabilmente vuoi aggiungerlo al tuo ~/.bashrc. In alternativa, è possibile configurarlo per tutti i completamenti di readline (non solo bash) in ~/.inputrc.

È inoltre possibile trovare bind -p(mostra i collegamenti correnti, notare che mostra tab as "\C-i") e bind -l(elencare tutte le funzioni che possono essere associate), nonché la sezione di modifica della riga del manuale di bash e la documentazione di readline .


3
@vanjadjurdjevic: Certo, basta associarli a chiavi diverse.
derobert,

4
menu-completeè bello, ma nasconde l'elenco di tutti i possibili suggerimenti ;-( È possibile sia vedere l'elenco che scorrere le opzioni?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

2
@CiroSantilli 六四 事件 法轮功 包 卓 轩 Mi piace anche questa funzione nelle shell basate su readline. Attualmente il modo zsh per farlo è molto interessante: il primo colpo di tab mostra tutte le possibilità, il secondo colpo di tab inizia a scorrere gli elementi di completamento.
xuhdev

1
Facciamo finta che si sta utilizzando cde menu-completee in bicicletta su directory. Quale tasto premi per "selezionare" quella directory e iniziare a scorrere i contenuti di quella directory? C'è un'altra cosa da impostare / associare?
Tony,

1
@Tony sì, lo inserirà. Ma se usi la barra, va bene, un percorso come " /usr/local//" è ancora perfettamente valido e inizierà a completare le cose all'interno del menu /usr/local.
derobert,

6

Puoi scorrere il menu di completamento in Bash e puoi anche mostrare il menu degli elementi. A differenza di Zsh, la voce di menu corrente non verrà evidenziata.

Aggiungi a ~/.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

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