3

Есть ли какой-нибудь способ получить bash для автозаполнения совпадающих символов, таких как '"[{( с их правосторонними аналогами? Я хотел бы сделать это без необходимости вкладки.

Например, ввод строки echo " немедленно приведет к появлению этой строки echo "|" , где мой курсор (труба) находится между двумя кавычками.

Бонусные баллы, если вы можете найти способ, которым, когда первая цитата удаляется, вторая также удаляется.

Если вы когда-либо использовали какой-либо зрелый текстовый редактор (например, возвышенный текст), вы можете понять, как работает это взаимодействие. Ответы, использующие рыбные раковины, также принимаются.

1 ответ1

3

Хотя вы не можете привязывать ключи к себе в GNU Readline - что-то вроде "(": "()" ведет к бесконечному циклу - есть способ. Не для readline вообще, только для bash . Добавьте это к вам .bashrc:

readline-brackets() {
    READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${1}${READLINE_LINE:$READLINE_POINT}"
    ((READLINE_POINT+=1))
}
bind -m vi-insert -x '"\"" : "readline-brackets \"\""'
bind -m vi-insert -x $'"\047" : "readline-brackets \\\047\\\047"' # SINGLE QUOTE
bind -m vi-insert -x '"<" : "readline-brackets \<\>"'
bind -m vi-insert -x '"(" : "readline-brackets \(\)"'
bind -m vi-insert -x '"[" : "readline-brackets []"'
bind -m vi-insert -x '"{" : "readline-brackets {}"'

Удалите -m vi-insert если вы используете режим emacs , а не vi .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .