¿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?
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
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 [).
set -o | egrep -w '^emacs|vi'devolverá si se configura emacs o vi.También existe
bind -V | grep editing-mode.man bashes enorme pero vale la pena leerlo en profundidad.fuente