2009-11-13 5 views
5

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

set -o vi 

o

set -o emacs 

Che cosa realmente sta succedendo qui? Ho letto un libro in cui afferma che la shell bash utilizza uno di questi editor per l'input della shell stessa, ma ho pensato che potrebbe aver usato readline.

risposta

5

Bash sta ancora utilizzando readline. Readline utilizza emacs o modalità vi e imposta i selettori di modalità tra le varie modalità dell'editor. Puoi controllare la cartella lib/readline nel codice sorgente di base per vedere i vari binding di tasti.

+0

'bind -p' ti mostrerà i binding attualmente attivi. –

+1

Nota: se metti 'set edit-mode vi' (o' set edit-mode emacs') nel tuo file ~/.inputrc, allora altri programmi che usano readline accetteranno le tue azioni di modifica della riga di comando preferite. Quando ho visto che questo dà alla mia capacità di editing di readline della shell Python sono andato "ooh aah". Nota per Python funziona solo nella shell Python lanciata dalla riga di comando, non inattiva. – Aaron

1

Utilizza le sequenze di tasti che sono familiari agli utenti di uno di questi editor per modificare la riga di comando.

Readline è la funzione 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. 
+0

ok ma per l'input effettivo utilizza readline? – Recursion

+0

Sì."Modifica" significa input e modifica. –

1

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

Una condizione: quando si preme v in modalità comando vi, si ottiene l'editor completo vi 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 a guscio invocazione. Per impostazione predefinita, i comandi di modifica riga sono simili a quelli di emacs. È inoltre disponibile un'interfaccia di modifica della linea in stile vi. Per disattivare la modifica delle linee dopo l'esecuzione della shell, utilizzare le opzioni +o emacs o +o vi per il file incorporato set.

Quando la shell si presenta con un prompt (a meno che non si è in modalità non-editing), sei già utilizzando readline. Sarai in modalità emacs o in modalità di inserimento vi (ecco perché puoi semplicemente usare ESC per tornare alla modalità di comando vi).

+0

Ecco quando premi 'v' mentre in ** modalità comando ** in modalità' vi'. –

1

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

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

... (saltando tutte le opzioni a lettera singola)

 
     -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. 
L'interpreto significa che bash sta interpretando direttamente i comandi per la modifica della riga. Questa opzione imposta semplicemente quale set di comandi utilizzare. Vedi la pagina man per readline (3).