Soweit ich gesehen habe, werden sowohl set -o emacs
als auch bindkey -e
verwendet, um das Verhalten Ihres Terminalzeileneditors zu ändern, um zu emulieren, emacs
während set -o vi
und bindkey -v
verwendet werden, um vi
Tastenkombinationen zu emulieren. Da sowohl set -o
als auch bindkey
dasselbe zu tun scheinen, habe ich mich gefragt, was die Unterschiede zwischen den beiden sind und ob es überhaupt Unterschiede gibt.
Es scheint, als ob set -o
es für die meisten Shells funktioniert, während bindkey
es sich um einen zle
bestimmten Befehl handelt. Ist das der einzige Unterschied? Binden sie außerdem dieselben Tasten oder gibt es Tasten, die set -o
an bindkey
unterschiedliche Operationen gebunden sind?
Antwort1
bindkey -v/-e
ist die tcsh
Syntax (ein bindkey
integriertes Element wurde 1990 in 5.19PL2 zu tcsh hinzugefügt), während set -o vi/emacs
die Ksh-Syntax ist (bereits in Ksh85 vorhanden, wahrscheinlich schon früher, da Ksh zumindest seit 1983 über den Emacs/VI-Modus verfügte).
In wurde 1991 in 2.0 hinzugefügt, das mit der ersten Version von zle kam (1.0, die vorherige Version, wurde zsh
von übernommen ).bindkey
readline
bash
zsh
, da die erste Version 1.0 setopt
Optionen festlegen musste (zusätzlich zu den Optionen, die wie in csh
/Bourne über die Befehlszeile übergeben wurden), während (t)csh
und bash
stattdessen spezielle Variablen verwendeten. In 2.0 wurde eine -o
Option (sowohl für den Interpreter als auch für das set
integrierte Element) aus Kompatibilitätsgründen mit hinzugefügt ksh
( bash
selbst konvertierte seine speziellen Variablen in Optionen, die mit einem neuen shopt
integrierten Element in 2.0 im Jahr 1996 festgelegt wurden; das ist ein separater Satz von Optionen von denen, die dort festgelegt wurden set -o
; set -o
Unterstützung wurde etwa 1990 hinzugefügt).
Die vi
und emacs
"Optionen" waren nichtbis 2003 zu zsh hinzugefügtin Version 4.1.1 allerdings. Das „Option“-Paradigma ist dafür nicht sehr geeignet, da emacs
der Modus deaktiviert wird, wenn Sie die Option festlegen vi
.
Sie werden feststellen, dass zsh -o emacs
und zsh -o vi
derzeit nicht richtig funktioniert, da zsh zsh: invalid module name `zsh/zle'
beim Start meldet (einInsekt).
Die meisten Shells, einschließlich , zsh
wählen den Standardbearbeitungsmodus auch basierend auf dem Wert der $EDITOR
Umgebungsvariablen aus $VISUAL
, um zu versuchen, den Zeilenbearbeitungsmodus an die Editoreinstellungen des Benutzers anzupassen.