$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 с плагинами.
Работает корректно в Bash, с настройками по умолчанию. Чтобы каждый раз это не биндить, пропиши ту же самую строчку в .bashrc/.inputrc. Или сразу глобально в /etc/inputrc если есть супер-юзер.
Нюансы:
Они есть, но вряд ли встретятся у тебя. Но все равно расскажу.
1. Макрос работает только в режиме emacs. Если не работает, возможно есть какое-то переопределение в bashrc/inputrc, типа такого:
set editing-mode vi
set -o vi
2. Не должно быть привязки функций 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".
3. Не должно быть действующих сочетаний клавиш:
"\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]."'
Ключи:
-X = List the key sequences bound by -x in a form suitable for input to bind.
-p = List the names of bindable editing functions, and what their bindings are, if any.
-s = List key sequences that invoke macros, and their values.
Cмотрим на левую часть, до двоеточия, у меня выдает такое:
"\"": "\C-v\"\C-v\"\C-b"
То есть все нормально. Короче такие себе грабли и вряд ли ты на них наступишь. Не знаю на сколько фича полезная, я давненько ей пользовался, но потом как-то не сложилось. Мне проще ручками проставить закрывашку, а не полагаться на какие-то хаки.
Но так или иначе, теперь и ты знаешь это, возможно в будущем или настоящем пригодится. Держи краба! Теперь уже точно, до завтра! Лайк, лайк!
tags: #bash
—
💩 @bashdays