Was ist der Unterschied zwischen „set -o emacs“ und „bindkey -e“?

Was ist der Unterschied zwischen „set -o emacs“ und „bindkey -e“?

Soweit ich gesehen habe, werden sowohl set -o emacsals auch bindkey -everwendet, um das Verhalten Ihres Terminalzeileneditors zu ändern, um zu emulieren, emacswährend set -o viund bindkey -vverwendet werden, um viTastenkombinationen zu emulieren. Da sowohl set -oals auch bindkeydasselbe 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 -oes für die meisten Shells funktioniert, während bindkeyes sich um einen zlebestimmten Befehl handelt. Ist das der einzige Unterschied? Binden sie außerdem dieselben Tasten oder gibt es Tasten, die set -oan bindkeyunterschiedliche Operationen gebunden sind?

Antwort1

bindkey -v/-eist die tcshSyntax (ein bindkeyintegriertes Element wurde 1990 in 5.19PL2 zu tcsh hinzugefügt), während set -o vi/emacsdie 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 zshvon übernommen ).bindkeyreadlinebash

zsh, da die erste Version 1.0 setoptOptionen festlegen musste (zusätzlich zu den Optionen, die wie in csh/Bourne über die Befehlszeile übergeben wurden), während (t)cshund bashstattdessen spezielle Variablen verwendeten. In 2.0 wurde eine -oOption (sowohl für den Interpreter als auch für das setintegrierte Element) aus Kompatibilitätsgründen mit hinzugefügt ksh( bashselbst konvertierte seine speziellen Variablen in Optionen, die mit einem neuen shoptintegrierten 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 -oUnterstützung wurde etwa 1990 hinzugefügt).

Die viund emacs"Optionen" waren nichtbis 2003 zu zsh hinzugefügtin Version 4.1.1 allerdings. Das „Option“-Paradigma ist dafür nicht sehr geeignet, da emacsder Modus deaktiviert wird, wenn Sie die Option festlegen vi.

Sie werden feststellen, dass zsh -o emacsund zsh -o viderzeit nicht richtig funktioniert, da zsh zsh: invalid module name `zsh/zle'beim Start meldet (einInsekt).

Die meisten Shells, einschließlich , zshwählen den Standardbearbeitungsmodus auch basierend auf dem Wert der $EDITORUmgebungsvariablen aus $VISUAL, um zu versuchen, den Zeilenbearbeitungsmodus an die Editoreinstellungen des Benutzers anzupassen.

verwandte Informationen