Domanda

Dal punto di vista di programmazione, quando si imposta la shell bash per usare vi o emacs tramite

set -o vi

o

set -o emacs

Che cosa sta realmente succedendo qui? Ho letto un libro in cui sostiene la shell bash utilizza uno di questi editor per l'ingresso al serbatoio stesso, ma ho pensato che potrebbe essere utilizzato readline.

È stato utile?

Soluzione

Bash è ancora utilizzando readline. Readline utilizza sia emacs o modalità vi e modificando la modalità commuta tra le varie modalità dell'editor. È possibile controllare la cartella lib / readline nel codice sorgente di base per vedere le varie combinazioni di tasti.

Altri suggerimenti

Secondo la pagina man BASH_BUILTINS (1) (su Fedora 8):

   set [--abefhkmnptuvxBCHP] [-o option] [arg ...]

... (saltando tutte le opzioni singole lettera)

         -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.
Interpreto che nel senso che bash interpreta direttamente i comandi per l'editing della riga. Questa opzione imposta semplicemente che comando set per usare. Vedere la pagina man per readline (3).

Esso utilizza le combinazioni di tasti che sono familiari agli utenti di uno di questi editor per modificare la riga di comando.

Readline è la struttura che fornisce tale funzionalità a Bash e altri programmi.

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

Da quello che so, readline è ciò che fornisce la funzionalità di line-editing per bash.

Una clausola:. Quando si preme v in modalità comando vi, si ottiene l'editor completo vi soffiato per modificare la riga di comando

Da man bash:

  

READLINE
  Questa è la libreria che gestisce la lettura di ingresso quando si utilizza una shell interattiva, a meno che l'opzione --noediting è dato alla invocazione della shell. Per default, i comandi di modifica linea sono simili a quelli di emacs. Un'interfaccia di editing linea VI-stile è inoltre disponibile. Per disattivare la modifica linea dopo il guscio è in esecuzione, utilizzare le opzioni +o emacs o +o vi al builtin set.

Quando la shell si presenta con un prompt (a meno che non si è in modalità non-editing), sei già usando readline. Potrai essere sia in modalità emacs o la modalità di inserimento VI (che è il motivo per cui si può semplicemente utilizzare ESC per tornare alla modalità di comando vi).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top