Ответы:
Так как ваш вопрос касается Bash:
Чтобы установить его постоянно для каждой новой сессии:
echo 'set -o vi' >> ~/.bashrc
или (рекомендуется) добавить (или изменить) строку в ./inputrc:
set editing-mode vi
Это установит режим редактирования readline, который используется рядом других программ помимо bash.
Отключить оба варианта легко:
shopt -ou vi emacs
Чтобы установить один, либо:
set -o vi
Или
shopt -os vi
То же самое для emacs. Установка viunsets emacsи наоборот.
Чтобы перечислить состояние:
$ shopt -op emacs
set +o emacs
$ shopt -op vi
set -o vi
Или оба сразу:
$ shopt -op emacs vi
set +o emacs
set -o vi
Чтобы проверить, viустановлено ли:
shopt -oq vi && echo vi is set
Или (синтаксис ksh):
[[ -o vi ]] && echo vi is set
Emacs:
shopt -oq emacs && echo emacs is set
Или:
[[ -o emacs ]] && echo emacs is set
или, чтобы проверить, что никакая опция не установлена:
! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set
Кому set:
set -o vi
Или:
set -o emacs
(установка одного сбрасывает другой. Вы можете сделать, set -o vi +o viчтобы сбросить оба)
Проверить:
if [[ -o emacs ]]; then
echo emacs mode
elif [[ -o vi ]]; then
echo vi mode
else
echo neither
fi
Этот синтаксис происходит от ksh. Это set -o viPOSIX. set -o emacsэто не так (как Ричард Столлман возражал против emacsрежима, определяемого POSIX), но очень распространено среди реализаций оболочки. Некоторые оболочки поддерживают дополнительные режимы редактирования. [[ -o option ]]не POSIX, но поддерживается ksh, bash и zsh. [ -o option ]поддерживается bash, kshи yash(обратите внимание, что -oэто также двоичный оператор OR для [).
set -o | egrep -w '^emacs|vi'вернет, установлен ли emacs или vi.