Jak ustawić tryb edycji wiersza poleceń vi
lub emacs
Bash ORAZ jak określić, który tryb jest aktualnie ustawiony?
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 vi
rozbrojenia emacs
i 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 vi
jest 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
Do set
:
set -o vi
Lub:
set -o emacs
(ustawienie jednego powoduje wyłączenie drugiego. Możesz zrobić to, set -o vi +o vi
aby 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 vi
Jest POSIX. set -o emacs
nie jest (jak Richard Stallman sprzeciwił się emacs
trybowi 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
, ksh
i yash
(Należy zauważyć, że -o
również w postaci binarnej lub operator [
).
set -o | egrep -w '^emacs|vi'
zwróci, czy ustawiony jest emacs czy vi.Jest też
bind -V | grep editing-mode
.man bash
jest ogromny, ale warte przeczytania w głębi.źródło