¿Cómo establecer y determinar el modo de edición de línea de comandos de Bash?

10

¿Cómo configurar el modo de edición de línea de comando vio emacsel Bash Y cómo determinar qué modo está configurado actualmente?

Blcknx
fuente

Respuestas:

6

Como su pregunta es específica sobre bash:

Para configurarlo permanentemente para cada nueva sesión:

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

o (recomendado), agregue (o cambie) una línea en ./inputrc:

set editing-mode vi

Esto establecerá el modo de edición de readline que es utilizado por varios otros programas además de bash.

Es fácil desarmar ambas opciones:

shopt -ou vi emacs

Para configurar uno, ya sea:

set -o vi

O

shopt -os vi

Lo mismo para emacs. Configuración de videsarmados emacsy viceversa.

Para enumerar el estado:

$ shopt -op emacs
set +o emacs

$ shopt -op vi
set -o vi

O ambos a la vez:

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

Para probar si viestá configurado:

shopt -oq vi      &&   echo vi is set

O (sintaxis ksh):

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

emacs:

shopt -oq emacs   &&   echo emacs is set

O:

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

o, para probar que no hay ninguna opción establecida:

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

Para set:

set -o vi

O:

set -o emacs

(configurar uno desarma al otro. Puede hacer set -o vi +o vipara desarmar ambos)

Verificar:

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

Esa sintaxis proviene ksh. El set -o vies POSIX. set -o emacsno es (como Richard Stallman se opuso al emacsmodo especificado por POSIX) pero es muy común entre las implementaciones de shell. Algunos shells admiten modos de edición adicionales. [[ -o option ]]no es POSIX, pero es compatible con ksh, bash y zsh. [ -o option ]es compatible con bash, kshy yash(tenga en cuenta que -otambién es un operador OR binario para [).

Stéphane Chazelas
fuente
Funciona y es sorprendente, que es tan difícil determinar el modo.
Blcknx
44
set -o | egrep -w '^emacs|vi'devolverá si se configura emacs o vi.
Stephen Harris el
4

También existe bind -V | grep editing-mode.

man bash es enorme pero vale la pena leerlo en profundidad.

Studog
fuente