Привет еще раз, кого не видел. Давай сейчас из говна и палок изобретем полезняшку. Создаём текстовый файл: ~/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 с плагинами.
Работает корректно в Bash, с настройками по умолчанию. Чтобы каждый раз это не биндить, пропиши ту же самую строчку в .bashrc/.inputrc. Или сразу глобально в /etc/inputrc если есть супер-юзер.
Нюансы:
Они есть, но вряд ли встретятся у тебя. Но всё равно расскажу.
- Макрос работает только в режиме emacs. Если не работает, возможно есть какое-то переопределение в bashrc/inputrc, типа такого:
set editing-mode vi
set -o vi
- Не должно быть привязки функций 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".
- Не должно быть действующих сочетаний клавиш:
"\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"
То есть все нормально. Короче такие себе грабли и вряд ли ты на них наступишь. Не знаю насколько фича полезная, я давненько ей пользовался, но потом как-то не сложилось. Мне проще ручками проставить закрывашку, а не полагаться на какие-то хаки.
Но так или иначе, теперь и ты знаешь это, возможно в будущем или настоящем пригодится. Держи краба! Теперь уже точно, до завтра! Лайк, лайк!








Комментарии