Jak ustawić i określić tryb edycji wiersza poleceń Bash?

10

Jak ustawić tryb edycji wiersza poleceń vilub emacsBash ORAZ jak określić, który tryb jest aktualnie ustawiony?

Blcknx
źródło

Odpowiedzi:

6

Ponieważ twoje pytanie dotyczy konkretnie bash:

Aby ustawić go na stałe dla każdej nowej sesji:

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

lub (zalecane) dodaj (lub zmień) wiersz w ./inputrc:

set editing-mode vi

Spowoduje to ustawienie trybu edycji readline, który jest używany przez kilka innych programów oprócz bash.

Łatwo jest rozbroić obie opcje:

shopt -ou vi emacs

Aby ustawić jedną z nich:

set -o vi

Lub

shopt -os vi

To samo dotyczy emacs. Ustawianie virozbrojenia emacsi odwrotnie.

Aby wyświetlić stan:

$ shopt -op emacs
set +o emacs

$ shopt -op vi
set -o vi

Lub oba naraz:

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

Aby sprawdzić, czy vijest ustawiony:

shopt -oq vi      &&   echo vi is set

Lub (składnia ksh):

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

emacs:

shopt -oq emacs   &&   echo emacs is set

Lub:

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

lub, aby sprawdzić, czy żadna opcja nie jest ustawiona:

! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set
Izaak
źródło
16

Do set:

set -o vi

Lub:

set -o emacs

(ustawienie jednego powoduje wyłączenie drugiego. Możesz zrobić to, set -o vi +o viaby usunąć oba)

Sprawdzić:

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

Ta składnia pochodzi ksh. set -o viJest POSIX. set -o emacsnie jest (jak Richard Stallman sprzeciwił się emacstrybowi określonemu przez POSIX), ale jest bardzo powszechny wśród implementacji powłoki. Niektóre powłoki obsługują dodatkowe tryby edycji. [[ -o option ]]nie jest POSIX, ale jest obsługiwany przez ksh, bash i zsh. [ -o option ]wspiera bash, kshi yash(Należy zauważyć, że -orównież w postaci binarnej lub operator [).

Stéphane Chazelas
źródło
Działa i jest zaskakujące, że tak trudno jest określić tryb.
Blcknx,
4
set -o | egrep -w '^emacs|vi'zwróci, czy ustawiony jest emacs czy vi.
Stephen Harris
4

Jest też bind -V | grep editing-mode.

man bash jest ogromny, ale warte przeczytania w głębi.

studog
źródło