2011-07-13 192 views
3

OK,我切換到以前的zsh了幾個小時,我在各地的大禮包一個巨大的配置 - 嘴硬,但是這很可能對我來說太大了咬牙:避免遞歸

我想做一個分隔符autopairnig,例如。類型(並將其插入()第一次失敗:

bindkey -s "(" "()"

第二失效:

function autopair() { 
zle -U "()" 
zle backward-char 
} 
zle -N autopair autopair 
bindkey "(" autopair 

我認爲無論是失敗,因爲zsh的嘗試遞歸的 「(」 插入(-U似乎想說有沒有辦法避免這種情況?在函數的第一行代替echo -ne "()"當然可以避免這種情況,但是不可編輯的...任何想法如何強制插入?

獎勵點數(比喻性地說是spea國王:)):我想插入後在括號內設置光標。在我的功能zle backward-char但是沒有做任何事情...

想象一下,這可能是多麼可怕!謝謝! 。

回答

6
function autopair() 
{ 
    LBUFFER+="(" 
    RBUFFER=")$RBUFFER" 
} 
zle -N autopair autopair 
bindkey "(" autopair 
+0

謝謝,但它並沒有爲我工作......沒有錯誤,只是沒有後插入任何東西「(」我只抄了你的片斷到我的.zshrc(和採購它) - 或我還必須以某種方式調用它嗎? – user673592

+0

@ user673592 *嘗試替換你的函數*。我沒有寫出所有這些zle的東西,因爲它已經在你的問題 – ZyX

+0

已更新,以便解決方案是顯而易見的(複製你的問題的兩行) – ZyX