在 bash 中引用或括号完成,无需按 TAB

在 bash 中引用或括号完成,无需按 TAB

有没有办法让 bash 自动完成匹配符号,就像'"[{(使用右手符号一样?我希望不用按 Tab 键就能做到这一点。

例如,键入字符串echo "会立即产生此字符串echo "|",其中我的光标(管道)位于两个引号之间。

如果您能找到一种方法,当删除第一个引号时,第二个引号也会被删除,则可以获得加分。

如果您曾经使用过任何成熟的文本编辑器(例如 sublime text),那么您可以理解这种交互的工作原理。使用 fish shell 的答案也是可以接受的。

答案1

尽管你不能在 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

相关内容