Je voulais trouver une solution pour cela depuis des années.
Je suis tellement plus productif dans vim lors de la manipulation de fichiers que bash pour cette raison.
Si j'ai
file_12390983421
file_12391983421
file_12340983421
file_12390986421
Dans bash et tapez file_1-> tab, il répertorie évidemment:
file_12390983421 file_12391983421 file_12340983421 file_12390986421
Et c'est un ennui horrible et douloureux à travailler.
La même séquence dans vim parcourra les fichiers un par un.
S'il vous plaît, quelqu'un me dit comment faire cela en bash, ou s'il y a un autre Shell qui peut le faire, je changerai demain.
Par défaut, TAB
est lié à la commande complete
readline. Votre comportement souhaité serait menu-complete
au lieu. Vous pouvez modifier vos paramètres de lignes de lecture en modifiant ~/.inputrc
. Pour relier TAB
, ajoutez cette ligne:
TAB: menu-complete
Pour plus de détails, consultez la section READLINE
dans man bash
.
Pour bash> = 4, vous aimerez peut-être ces paramètres:
# If there are multiple matches for completion, Tab should cycle through them
bind 'TAB':menu-complete
# Display a list of the matching files
bind "set show-all-if-ambiguous on"
# Perform partial completion on the first Tab press,
# only start cycling full results on the second Tab press
bind "set menu-complete-display-prefix on"
Cette configuration est similaire à Vim's set wildmode=longest:full:list,full
J'ai extrait ces paramètres de cette question sur le site Unix et Linux.
Au dessus de
# cycle forward
Control-k: menu-complete
# cycle backward
Control-j: menu-complete-backward
vous pouvez également envisager d'ajouter
# display one column with matches
set completion-display-width 1
De cette façon, vous conservez la fonctionnalité Tab actuelle et faites en sorte que bash affiche les possibilités dans une colonne. Donc au lieu de
file_12340983421 file_12390983421 file_12390986421 file_12391983421
vous obtiendrez
file_12340983421
file_12390983421
file_12390986421
file_12391983421
P.S. Vous pouvez obtenir la bibliothèque readline
à jour à partir de ce site Web The GNU Readline Library .
Grâce à @sth, j'ai trouvé ce qui fonctionne le mieux pour moi:
Pour conserver l'achèvement normal de l'onglet bash, puis utilisez ctl-f pour faire défiler lorsque cela est nécessaire à l'aide de menu-complete
mettez ceci dans votre fichier .inputrc:
"\C-f": menu-complete
D'après mon expérience, la solution fournie dans la réponse de sth n'a jamais complètement fonctionné pour moi. TL; DR: Ajoutez set -o vi
à ton ~/.bashrc
.
Lorsque j'utilise menu-complete en conjonction avec des raccourcis clavier vi, je dois m'assurer que mon ~/.bashrc
a:
set -o vi
Ça n'a jamais été suffisant pour mon ~/.inputrc
juste pour avoir:
TAB: menu-complete
set editing-mode vi
set keymap vi
Je suppose que d'une manière ou d'une autre set editing-mode
et set keymap
secouent le TAB: ...
paramètre, mais je n'ai pas examiné la documentation à fond pour comprendre pourquoi c'est le cas.