2012-07-14 52 views
3

在各種基於GNU Readline的CLI上工作,如果有一種方法可以讓括號和引號 在鍵入時自動關閉,它將大大加快我的速度。Autoclose GNU Readline

因此打字擊(或其他的CLI)一個'(實際上 追加閉引號或托架''()或和將光標置於其間 用於寫入。

我環顧四周相當長的一段時間,試圖找出相關 (例如~/.inputrc設置)任何東西,但沒有發現任何東西,我不知道這是否是 都可以實現的。任何意見將不勝感激。

回答

3

這有點棘手,但可行。作爲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" 

您可以前綴與控制-V的每一個關鍵類型爲「普通」行情並留下括號而不觸發自動關閉行爲。

上面假設Emacs鍵盤綁定。對於六個綁定,使用

bind '"(": "\C-v()\ei"' 
bind '"\"" "\C-v\"\C-v\"\ei"' 

"(": "\C-v()\ei" 
"\"": "\C-v\"\C-v\"\ei" 

本質上說,只是用[D替換i;代替發送轉義序列以將光標向左移動,只需在插入括號/引號後發送\e以回到命令模式,然後重新進入插入模式,該模式應該將光標定位在剛輸入的字符內。

+0

這很好,但如果我有'設置編輯模式vi',它會讓我在自動完成後退出插入模式,這非常煩人。這可以解決嗎? – qed 2014-03-06 10:05:06

0

做你想要的東西是不可能的,但是有一個解決辦法。在inputrc中 將這個:

"\C-x\"": "\"\"C-b" 

運行:

info readline "comm" "readline init" "sample" 

整個樣品。

+0

不是不可能的,只是令人費解。 – chepner 2012-07-26 12:31:20