有没有办法让 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
。