2009-11-13 3 views
5

Aus Sicht der Programmierung, wenn Sie die Bash-Shell gesetzt vi oder Emacs zu verwenden, überBash Verwendung von vi oder Emacs

set -o vi 

oder

set -o emacs 

Was hier eigentlich los? Ich habe ein Buch gelesen, in dem behauptet wird, dass die Bash-Shell einen dieser Editoren für die Eingabe in die Shell selbst verwendet, aber ich dachte, dass sie readline verwendet haben könnte.

Antwort

5

Bash verwendet immer noch readline. Readline verwendet entweder den Emacs- oder den vi-Modus und stellt den Modus zwischen den verschiedenen Editiermodi um. Sie können den lib/readline-Ordner im Basisquellcode überprüfen, um die verschiedenen Tastenbelegungen zu sehen.

+0

'bind -p' zeigt Ihnen die aktuell aktiven Tastenbelegungen. –

+1

Hinweis: Wenn Sie 'set editing-mode vi' (oder' set editing-mode emacs') in Ihre ~/.inputrc-Datei setzen, dann akzeptieren andere Programme, die readline verwenden, Ihre bevorzugten Befehlszeilen-Bearbeitungsaktionen. Als ich sah, dass dies meiner Python Shell readline Bearbeitungsfähigkeit gibt, ging ich "ooh aah". Hinweis für Python funktioniert es nur in der Python-Shell, die von der Befehlszeile gestartet wird, nicht im Leerlauf. – Aaron

1

Es verwendet die Tastenkombinationen, die Benutzern eines dieser Editoren vertraut sind, um die Befehlszeile zu bearbeiten.

Readline ist die Einrichtung, die diese Funktion Bash und anderen Programmen bietet.

Von 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, aber für den tatsächlichen Eingang verwendet es readline? – Recursion

+0

Ja."Bearbeiten" bedeutet Eingabe und Bearbeitung. –

1

Von dem, was ich weiß, readline ist es, was die für bash Line-Bearbeitungsfunktionen zur Verfügung stellt.

Eine Bedingung: Wenn Sie v im vi Befehlsmodus drücken, erhalten Sie den vollen vi Editor, um Ihre Befehlszeile zu bearbeiten.

Von man bash:

Readline-
          Dies ist die Bibliothek, die Eingabe zu lesen Griffe, wenn eine interaktive Shell verwenden, es sei denn, die --noediting Option bei Shell Aufruf gegeben. Standardmäßig sind die Zeilenbearbeitungsbefehle denen von Emacs ähnlich. Ein vi-style Linienbearbeitungsschnittstelle ist ebenfalls verfügbar. Um die Zeilenbearbeitung nach dem Ausführen der Shell zu deaktivieren, verwenden Sie die Optionen +o emacs oder +o vi für die integrierte set.

Wenn die Schale präsentiert Ihnen eine Eingabeaufforderung (es sei denn, Sie in nicht-Editier-Modus sind), sind Sie bereitsreadline verwenden. Sie werden entweder im Emacs-Modus oder im vi-Einfügemodus sein (deshalb können Sie einfach ESC verwenden, um zum vi-Befehlsmodus zurückzukehren).

+0

Das ist, wenn Sie 'v' im ** Befehlsmodus ** im' vi' Modus drücken. –

1

Nach der Manpage BASH_BUILTINS (1) (auf Fedora 8):

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

... (Überspringen all Einzelbuchstaben-Optionen)

 
     -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. 
Ich interpretiere das so, dass bash die Befehle für die Zeilenbearbeitung direkt interpretiert. Diese Option legt einfach fest, welcher Befehlssatz verwendet werden soll. Siehe die man-Seite für readline (3).

Verwandte Themen