l'utilisation Bash de vi ou emacs
-
19-09-2019 - |
Question
Du point de vue de la programmation, lorsque vous définissez le shell bash à utiliser vi ou emacs via
set -o vi
ou
set -o emacs
Qu'est-ce qui se passe réellement ici? J'ai lu un livre où il prétend que le shell bash utilise l'un de ces éditeurs pour l'entrée à la coque elle-même, mais je pense qu'il peut avoir utilisé readline.
La solution
Bash utilise toujours readline. Readline utilise soit emacs ou vi en mode et le réglage des commutateurs de mode entre les différents modes de l'éditeur. Vous pouvez vérifier le dossier lib / readline dans le code source de base pour voir les différents raccourcis clavier.
Autres conseils
D'après la BASH_BUILTINS page man (1) (sur Fedora 8):
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
... (sauter toutes les options une seule lettre)
-o option-name The option-name can be one of the following:
...
emacs Use an emacs-style command line editing interface. This is enabled by default when the shell is interactive, unless the shell is started with the --noediting option....
vi Use a vi-style command line editing interface.J'interprète cela pour dire que bash interprète directement les commandes d'édition de ligne. Cette option définit simplement qui commande configurée pour utiliser. Voir la page de manuel pour readline (3).
Il utilise les touches qui sont familières aux utilisateurs de l'un de ces éditeurs pour modifier la ligne de commande.
readline l'établissement qui offre cette fonctionnalité à Bash et d'autres programmes.
De man bash
:
READLINE This is the library that handles reading input when using an interac‐ tive shell, unless the --noediting option is given at shell invocation. Line editing is also used when using the -e option to the read builtin. By default, the line editing commands are similar to those of emacs. A vi-style line editing interface is also available. Line editing can be enabled at any time using the -o emacs or -o vi options to the set builtin (see SHELL BUILTIN COMMANDS below). To turn off line editing after the shell is running, use the +o emacs or +o vi options to the set builtin.
D'après ce que je sais, readline
est ce qui fournit la fonctionnalité d'édition de ligne pour bash.
Une condition:. Lorsque vous appuyez sur v
en mode commande vi, vous obtenez l'éditeur complet vi
soufflé pour modifier votre ligne de commande
De man bash
:
READLINE
Ceci est la bibliothèque qui gère la saisie lors d'une shell interactif, sauf si l'option--noediting
est donnée à l'invocation shell. Par défaut, les commandes d'édition de ligne sont similaires à ceux de emacs. Une interface d'édition de ligne de style vi est également disponible. Pour désactiver l'édition en ligne après la coque est en cours d'exécution, utilisez les options de+o emacs
ou+o vi
à la commande interneset
.
Lorsque le shell vous présente une invite (sauf si vous êtes en mode non-édition), vous êtes déjà à l'aide readline
. Vous être soit en mode emacs ou en mode d'insertion de vi (ce qui est la raison pour laquelle vous pouvez simplement utiliser ESC
pour revenir à vi mode de commande).