Cela montre que la liaison par défaut des touches Meta+Esc(et Ctrl+i) en mode d'édition de ligne de commande Emacs est la fonction Readline complete. La Metaclé se trouve généralement Escsur les claviers sans Metaclé explicite . La documentation Readline pour cette fonction indique
Essayez d'effectuer l'achèvement du texte avant le point. L'achèvement réel effectué est spécifique à l'application. Bash, par exemple, tente de terminer le traitement du texte comme une variable (si le texte commence par $), un nom d'utilisateur (si le texte commence par
~), un nom d'hôte (si le texte commence par @) ou une commande (y compris les alias et les fonctions) tour à tour. Si aucun de ces éléments ne produit de correspondance, la complétion du nom de fichier est tentée. Gdb, d'autre part, permet l'achèvement des fonctions et des variables du programme, et ne tente l'achèvement du nom de fichier que dans certaines circonstances.
Concernant votre commentaire à la réponse d' Anthon : Non, appuyer Escdeux fois n'est pas la même chose qu'en appuyant Tabgénéralement (sauf si c'est dans un programme qui les mappe tous les deux à la même action, comme Readline le fait par défaut). Cependant Ctrl+iest identique à Tab, tout comme Ctrl+[est identique à Esc. Cela signifie que vous pouvez effectuer l'achèvement avec Ctrl+[Ctrl+[in bashsi vous le souhaitez, tant que double Escest lié à la completefonction Readline . C'est pratique si vous travaillez sur un terminal VT220, par exemple, qui n'a pas la touche Échap:
Kusalananda, merci pour cette réponse en profondeur. À propos de votre dernier point: pourquoi la pression Escdeux fois (ou \M-\e) n'est-elle pas la même que Tabdans bash, si les deux se terminent?
flow2k
1
@ flow2k Il en est de même si Esc-Esc et Tab sont liés à la completefonction, ce qu'ils sont par défaut, mais pas en général (c'est-à-dire que les pressions sur les touches ne sont pas "les mêmes"). Vous ne pouvez pas remplacer Tab par Esc-Esc partout, uniquement dans les programmes capables de lecture. Cependant, vous pouvez remplacer Tab par Ctrl-i ou Esc par Ctrl- [n'importe où.
Kusalananda
Un suivi si je peux: je ne vois pas Tabdans la sortie de bind -p. Pourquoi donc? Peut-être parce qu'il Tabest "codé en dur" et ne peut pas être lié?
flow2k
1
@ flow2k Non, Tab est identique à Ctrl-i. Cherchez \C-i. Il s'agit d'une équivalence au niveau matériel.
Kusalananda
8
C'est ce qu'on appelle l'achèvement de fichier, et si vous n'avez aucune commande précédente sur la ligne de commande, bash vous proposera d'exécuter toutes les 2837 commandes qu'il connaît, à la fois intégrées et celles trouvées dans votre PATH
Esc
deux fois (ou\M-\e
) n'est-elle pas la même queTab
dans bash, si les deux se terminent?complete
fonction, ce qu'ils sont par défaut, mais pas en général (c'est-à-dire que les pressions sur les touches ne sont pas "les mêmes"). Vous ne pouvez pas remplacer Tab par Esc-Esc partout, uniquement dans les programmes capables de lecture. Cependant, vous pouvez remplacer Tab par Ctrl-i ou Esc par Ctrl- [n'importe où.Tab
dans la sortie debind -p
. Pourquoi donc? Peut-être parce qu'ilTab
est "codé en dur" et ne peut pas être lié?\C-i
. Il s'agit d'une équivalence au niveau matériel.C'est ce qu'on appelle l'achèvement de fichier, et si vous n'avez aucune commande précédente sur la ligne de commande, bash vous proposera d'exécuter toutes les 2837 commandes qu'il connaît, à la fois intégrées et celles trouvées dans votre
PATH
Les sont présentés dans l'ordre trié
la source