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.

Était-ce utile?

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 interne set.

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top