Привет еще раз, кого не видел. Давай сейчас из говна и палок изобретем полезняшку. Создаём текстовый файл: ~/bashdays и вставляем в него такое содержимое:

$if mode=emacs
"\"": "\C-v\"\C-v\"\C-b"
"'": "\C-v\'\C-v\'\C-b"
"`": "\C-v\`\C-v\`\C-b"
"(": "\C-v\(\C-v\)\C-b"
"[": "\C-v\[\C-v\]\C-b"
"{": "\C-v\{\C-v\}\C-b"
$endif

Загружаем эти макросы из файла:

bind -f ~/bashdays

Теперь при вводе кавычки или скобки в терминале, они будут автоматически закрываться. А курсор удобно разместится между этими символами. Как в лучших традициях современных IDE с плагинами.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Теперь при вводе кавычки или скобки в терминале, они будут автоматически закрываться.

Работает корректно в Bash, с настройками по умолчанию. Чтобы каждый раз это не биндить, пропиши ту же самую строчку в .bashrc/.inputrc. Или сразу глобально в /etc/inputrc если есть супер-юзер.

Нюансы:

Они есть, но вряд ли встретятся у тебя. Но всё равно расскажу.

  1. Макрос работает только в режиме emacs. Если не работает, возможно есть какое-то переопределение в bashrc/inputrc, типа такого:
set editing-mode vi
set -o vi
  1. Не должно быть привязки функций quoted-insert, backward-char (библиотека readline) к сочетаниям \C-v, \C-b. Иначе придется править сам макрос. Проверяем:
bind -q quoted-insert
bind -q backward-char

Должно вывестись примерно такое:

quoted-insert can be invoked via "\C-q", "\C-v".
backward-char can be invoked via "\C-b", "\eOD", "\e[D".
  1. Не должно быть действующих сочетаний клавиш:
"\C-v\"
"\C-v'"
"\C-v`"
"\C-v("
"\C-v["
"\C-v{"

Проверяем:

bind -X | grep 'C-[vb]."'
bind -p | grep 'C-[vb]."'
bind -s | grep 'C-[vb]."'

Ключи:

Смотрим на левую часть, до двоеточия, у меня выдает такое:

"\"": "\C-v\"\C-v\"\C-b"

То есть все нормально. Короче такие себе грабли и вряд ли ты на них наступишь. Не знаю насколько фича полезная, я давненько ей пользовался, но потом как-то не сложилось. Мне проще ручками проставить закрывашку, а не полагаться на какие-то хаки.

Но так или иначе, теперь и ты знаешь это, возможно в будущем или настоящем пригодится. Держи краба! Теперь уже точно, до завтра! Лайк, лайк!