Por lo que he visto, ambos set -o emacs
y bindkey -e
se usan para modificar el comportamiento de su editor de línea de terminal para emular, emacs
mientras que set -o vi
y bindkey -v
se usan para emular vi
combinaciones de teclas. Dado que ambos set -o
parecen bindkey
hacer lo mismo, me preguntaba cuáles eran las diferencias entre los dos y si había alguna diferencia.
Parece que set -o
funciona para la mayoría de los shells, aunque bindkey
es un zle
comando específico. ¿Es esta la única diferencia? Además, ¿vinculan las mismas claves o hay algunas claves que se set -o
vinculan bindkey
a diferentes operaciones?
Respuesta1
bindkey -v/-e
es la tcsh
sintaxis ( bindkey
se agregó una función incorporada a tcsh en 5.19PL2 en 1990), mientras que set -o vi/emacs
es la sintaxis ksh (ya está en ksh85, probablemente antes, ya que ksh tenía el modo emacs/vi al menos desde 1983).
En zsh
, bindkey
se agregó en 2.0 en 1991, que vino con la primera versión de zle (1.0, la versión anterior utilizada readline
fue tomada de bash
).
zsh
, ya que la primera versión 1.0 tenía setopt
que configurar opciones (además de las opciones pasadas en la línea de comando como en csh
/Bourne), mientras que (t)csh
en bash
su lugar usaba variables especiales. En 2.0, se agregó una -o
opción (tanto al intérprete como al incorporado) para compatibilidad con ( él mismo convirtió sus variables especiales en opciones configuradas con un nuevo incorporado en 2.0 en 1996; ese es un conjunto de opciones separado de las configuradas allí; soporte agregado alrededor de 1990).set
ksh
bash
shopt
set -o
set -o
Las "opciones" vi
y emacs
no eranagregado a zsh hasta 2003Sin embargo, en la versión 4.1.1. El paradigma de "opción" no es muy apropiado para eso, ya que cuando configura la emacs
opción, desactiva el vi
modo.
Notarás eso zsh -o emacs
y zsh -o vi
actualmente no funciona correctamente en los informes zsh zsh: invalid module name `zsh/zle'
al inicio (unbicho).
La mayoría de los shells zsh
también seleccionan el modo de edición predeterminado según el valor de las variables de entorno $EDITOR
y $VISUAL
para intentar hacer coincidir el modo de edición de línea con la preferencia del editor del usuario.