Como definir o modo de edição de linha de comando vi
ou emacs
o Bash E como determinar qual modo está definido atualmente?
Como sua pergunta é específica sobre o bash:
Para defini-lo permanentemente para cada nova sessão:
echo 'set -o vi' >> ~/.bashrc
ou (recomendado), adicione (ou altere) uma linha em ./inputrc:
set editing-mode vi
Isso definirá o modo de edição do readline, usado por vários outros programas além do bash.
É fácil desabilitar as duas opções:
shopt -ou vi emacs
Para definir um:
set -o vi
Ou
shopt -os vi
O mesmo para emacs
. Configurando o vi
unsets emacs
e vice-versa.
Para listar o estado:
$ shopt -op emacs
set +o emacs
$ shopt -op vi
set -o vi
Ou ambos de uma vez:
$ shopt -op emacs vi
set +o emacs
set -o vi
Para testar se vi
está definido:
shopt -oq vi && echo vi is set
Ou (sintaxe ksh):
[[ -o vi ]] && echo vi is set
emacs:
shopt -oq emacs && echo emacs is set
Ou:
[[ -o emacs ]] && echo emacs is set
ou, para testar se nenhuma opção está definida:
! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set
Para set
:
set -o vi
Ou:
set -o emacs
(definir um desativa o outro. Você pode set -o vi +o vi
desabilitar os dois)
Checar:
if [[ -o emacs ]]; then
echo emacs mode
elif [[ -o vi ]]; then
echo vi mode
else
echo neither
fi
Essa sintaxe vem ksh
. O set -o vi
é POSIX. set -o emacs
não é (como Richard Stallman se opôs ao emacs
modo sendo especificado pelo POSIX), mas muito comum entre implementações de shell. Alguns shells suportam modos de edição extras. [[ -o option ]]
não é POSIX, mas suportado pelo ksh, bash e zsh. [ -o option ]
é suportado por bash
, ksh
e yash
(nota que -o
também é um binário OU operador para [
).
set -o | egrep -w '^emacs|vi'
retornará se o emacs ou vi estiver definido.Há também
bind -V | grep editing-mode
.man bash
é enorme, mas vale a pena ler em profundidade.fonte