Wie stelle ich den Befehlszeilen-Bearbeitungsmodus von Bash ein und bestimme ihn?

10

Wie stelle ich den Bash-Modus vioder den emacsBefehlszeilen-Bearbeitungsmodus ein UND wie bestimme ich, welcher Modus gerade eingestellt ist?

Blcknx
quelle

Antworten:

6

Da Ihre Frage spezifisch für Bash ist:

So stellen Sie es für jede neue Sitzung dauerhaft ein:

echo 'set -o vi' >> ~/.bashrc

oder (empfohlen) eine Zeile in ./inputrc hinzufügen (oder ändern):

set editing-mode vi

Dadurch wird der Bearbeitungsmodus von readline festgelegt, der von mehreren anderen Programmen neben bash verwendet wird.

Es ist einfach, beide Optionen zu deaktivieren:

shopt -ou vi emacs

So stellen Sie eine ein:

set -o vi

Oder

shopt -os vi

Das gleiche gilt für emacs. Einstellen von viUnsets emacsund umgekehrt.

So listen Sie den Status auf:

$ shopt -op emacs
set +o emacs

$ shopt -op vi
set -o vi

Oder beides gleichzeitig:

$ shopt -op emacs vi
set +o emacs
set -o vi

So testen Sie, ob vieingestellt ist:

shopt -oq vi      &&   echo vi is set

Oder (ksh-Syntax):

[[ -o vi ]]        &&   echo vi is set

Emacs:

shopt -oq emacs   &&   echo emacs is set

Oder:

[[ -o emacs ]]    &&   echo emacs is set

oder, um zu testen, ob keine Option festgelegt ist:

! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set
Isaac
quelle
16

An set:

set -o vi

Oder:

set -o emacs

(Wenn Sie eins einstellen, wird das andere deaktiviert. Sie können set -o vi +o vibeide deaktivieren. )

Überprüfen:

if [[ -o emacs ]]; then
  echo emacs mode
elif [[ -o vi ]]; then
  echo vi mode
else
  echo neither
fi

Diese Syntax kommt von ksh. Das set -o viist POSIX. set -o emacsist nicht (wie Richard Stallman gegen den emacsvon POSIX angegebenen Modus protestierte ), aber bei Shell-Implementierungen sehr verbreitet. Einige Shells unterstützen zusätzliche Bearbeitungsmodi. [[ -o option ]]ist nicht POSIX, sondern wird von ksh, bash und zsh unterstützt. [ -o option ]wird unterstützt von bash, kshund yash(beachten Sie, dass dies -oauch ein binärer ODER-Operator für ist [).

Stéphane Chazelas
quelle
Es funktioniert und es ist überraschend, dass es so schwierig ist, den Modus zu bestimmen.
Blcknx
4
set -o | egrep -w '^emacs|vi'gibt zurück, ob emacs oder vi gesetzt ist.
Stephen Harris
4

Es gibt auch bind -V | grep editing-mode.

man bash ist riesig, aber es lohnt sich, es ausführlich zu lesen.

studog
quelle