Como definir e determinar o modo de edição da linha de comando do Bash?

10

Como definir o modo de edição de linha de comando viou emacso Bash E como determinar qual modo está definido atualmente?

Blcknx
fonte

Respostas:

6

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 viunsets emacse 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 viestá 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
Isaac
fonte
16

Para set:

set -o vi

Ou:

set -o emacs

(definir um desativa o outro. Você pode set -o vi +o videsabilitar 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 emacsnão é (como Richard Stallman se opôs ao emacsmodo 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, kshe yash(nota que -otambém é um binário OU operador para [).

Stéphane Chazelas
fonte
Funciona e é surpreendente que seja difícil determinar o modo.
Blcknx
4
set -o | egrep -w '^emacs|vi'retornará se o emacs ou vi estiver definido.
Stephen Harris
4

Há também bind -V | grep editing-mode.

man bash é enorme, mas vale a pena ler em profundidade.

studog
fonte