Autoclose GNU Readline
Работа над различными интерфейсами командной строки на основе GNU Readline, и это значительно ускорило бы меня, если бы был способ автоматически закрывать скобки и кавычки при вводе текста.
Таким образом, набрав '
или же (
на Bash (или других CLI) фактически добавит закрывающую кавычку или скобку ''
или же ()
и поместите курсор между ними для записи.
Я довольно долго осматривался, пытаясь выяснить что-нибудь связанное (например, ~/.inputrc
настройки), но ничего не нашел, и мне интересно, если это вообще достижимо. Любые замечания будут оценены.
2 ответа
Это немного сложно, но выполнимо. Как bash
команда:
bind '"(" "\C-v()\e[D"'
bind '"\"" "\C-v\"\C-v\"\e[D"'
Как настройка в .inputrc
(так что любая программа, использующая readline
получает поведение):
"(": "\C-v()\e[D"
"\"": "\C-v\"\C-v\"\e[D"
Вы можете поставить перед каждым ключом клавишу Control-v, чтобы вводить "простые" кавычки и левые скобки, не вызывая поведение автоматического закрытия.
Вышеприведенное предполагает использование комбинаций клавиш Emacs. Для привязок vi используйте
bind '"(": "\C-v()\ei"'
bind '"\"" "\C-v\"\C-v\"\ei"'
или же
"(": "\C-v()\ei"
"\"": "\C-v\"\C-v\"\ei"
По сути, просто замените [D
с i
; вместо отправки escape-последовательности для перемещения курсора влево, просто отправьте \e
вернуться в командный режим после вставки скобок / кавычек, а затем снова войти в режим вставки, при котором курсор должен находиться внутри только что введенных символов.
Делать именно то, что вы хотите, невозможно, но есть обходной путь. Поместите это в inputrc:
"\C-x\"": "\"\"C-b"
Бежать:
info readline "comm" "readline init" "sample"
для всего образца.