避免在zsh命令行中使用递归。

3

好的,几个小时前我切换到了zsh,并且我正在进行大量的配置调整,但这对我来说可能是一个太大的难题:

我想要做一个分隔符自动配对,例如输入 ( ,它会插入 ()。第一个失败的尝试:

bindkey -s "(" "()"

第二个失败的尝试:

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

我认为两者都失败了,因为zsh尝试在“(”插入处递归(-U似乎明确表示了这一点)。有没有办法避免这种情况?当然,将echo -ne "()"替换为函数的第一行可以避免这种情况,但无法编辑...有什么想法可以强制插入吗?
额外加分(比喻意义):我想在插入后设置光标在括号之间。然而,我的函数中的zle backward-char并没有起到任何作用...
想象一下这有多棒!谢谢!
1个回答

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

谢谢,但对我没有用……没有错误,只是在“(”后面没有插入任何内容。我只是将您的片段复制到我的.zshrc文件中(并进行了源代码处理)-或者我还需要以某种方式调用它吗? - user673592
@user673592 尝试更换您的函数。我没有写所有这些zle的内容,因为它们已经在您的问题中了。 - ZyX
更新以便解决方案明显(从您的问题中复制了这两行)。 - ZyX
2
我的天啊,我真是个白痴!(为了辩护我今天早些时候非常匆忙...)。是的,这很有效,超出了我的预期!非常感谢! - user673592

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接