Ответы:
Так как ваш вопрос касается Bash:
Чтобы установить его постоянно для каждой новой сессии:
echo 'set -o vi' >> ~/.bashrc
или (рекомендуется) добавить (или изменить) строку в ./inputrc:
set editing-mode vi
Это установит режим редактирования readline, который используется рядом других программ помимо bash.
Отключить оба варианта легко:
shopt -ou vi emacs
Чтобы установить один, либо:
set -o vi
Или
shopt -os vi
То же самое для emacs
. Установка vi
unsets 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 vi
POSIX. 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.