¿Cómo configurar el modo de edición de línea de comando vi
o emacs
el Bash Y cómo determinar qué modo está configurado actualmente?
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 vi
desarmados emacs
y 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 vi
está 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
Para set
:
set -o vi
O:
set -o emacs
(configurar uno desarma al otro. Puede hacer set -o vi +o vi
para 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 vi
es POSIX. set -o emacs
no es (como Richard Stallman se opuso al emacs
modo 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
, ksh
y yash
(tenga en cuenta que -o
también es un operador OR binario para [
).
set -o | egrep -w '^emacs|vi'
devolverá si se configura emacs o vi.También existe
bind -V | grep editing-mode
.man bash
es enorme pero vale la pena leerlo en profundidad.fuente