Как отключить Esc -v в bash при открытии предыдущей команды в редакторе?

Предполагая переменную среды, поскольку test-ingне является допустимым именем переменной оболочки, вы можете использоватьprintenv:

% env foo-bar=baz printenv foo-bar
baz

Или Перл:

% env foo-bar=baz perl -e 'print $ENV{"foo-bar"}'
baz

Или другие инструменты, такие как Python и т. д.

4
11.06.2021, 07:42
1 ответ

Похоже, вы неосознанно используете bashв режиме vi.

В режиме vibash, как и vi, имеет режим вставки , в который можно вставлять текст (, и режим замены , который является разновидностью )и командный режим , где вы можете вводить команды движения или действия, такие как xдля удаления символа, bдля перемещения на одно слово назад и т. д.

Вы переключаетесь из режима вставки/замены в командный режим с помощью Esc и нескольких команд, таких как i, a, A. ], s... может заставить вас войти в режим вставки из командного режима .

В командном режиме команда vвызывает редактор для редактирования текущей строки (редактор viне имеет команды, привязанной к v, поэтому ksh (на на котором основан bash )можно было использовать для этой конкретной задачи ).

Здесь мне кажется, что вы не ожидаете использования viстиля привязки клавиш. Привязка клавиш bash/ readlineпо умолчанию — emacs, а не vi, поэтому я подозреваю, что вы или ваш системный администратор ввели некоторые настройки, которые включают режим viпо умолчанию.

Это можно сделать, добавив set -o viв /etc/bashrcили /etc/bash.bashrcвезде, где в вашей системе находится системный файл настройки по умолчанию для bash, или set editing-mode viв /etc/inputrc.

Или у вас могут быть аналогичные настройки в ваших собственных ~/.bashrcили ~/.inputrc.

Вероятно, вы захотите изменить его обратно на set -o emacsв ~/.bashrcили set editing-mode emacsв ~/.inputrc.

Обратите внимание, что режим emacsимеет аналогичную функцию, привязанную к Ctrl+XCtrl+E

Если вы планируете использовать режим viи не хотите, чтобы vпорождал редактор,затем вы можете назначить виджет на v, отличный от edit-and-execute-command, например:

bind -m vi-command '"v": abort'

Или в пустую строку, чтобы она игнорировалась:

bind -m vi-command '"v": ""'
12
28.07.2021, 11:25

Теги

Похожие вопросы