Как установить и определить режим редактирования командной строки Bash?

10

Как установить режим редактирования командной строки viили emacsBash И как определить, какой режим установлен в данный момент?

Blcknx
источник

Ответы:

6

Так как ваш вопрос касается 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
Исаак
источник
16

Кому 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 для [).

Стефан Шазелас
источник
Это работает, и это удивительно, что это так трудно определить режим.
Blcknx
4
set -o | egrep -w '^emacs|vi'вернет, установлен ли emacs или vi.
Стивен Харрис
4

Также есть bind -V | grep editing-mode.

man bash огромен, но его стоит прочитать подробно.

studog
источник