Zsh zle向后字符未按预期工作
我正在编写一个简单的ZLE小部件,用Zsh zle向后字符未按预期工作,zsh,oh-my-zsh,zsh-zle,Zsh,Oh My Zsh,Zsh Zle,我正在编写一个简单的ZLE小部件,用快速创建子shell。以下是我所拥有的: function zle_subshell { zle -U '$()' zle .backward-char } # register as widget zle -N zle_subshell # create kbd bindkey '^j' zle_subshell 但是,zle.backward char似乎不起作用。更令人困惑的是,如果我将脚本修改为: function zle_subshel
快速创建子shell。以下是我所拥有的:
function zle_subshell {
zle -U '$()'
zle .backward-char
}
# register as widget
zle -N zle_subshell
# create kbd
bindkey '^j' zle_subshell
但是,zle.backward char
似乎不起作用。更令人困惑的是,如果我将脚本修改为:
function zle_subshell {
zle -U '$('
zle -U ')'
zle .backward-char
}
我得到的输出像)$(
似乎zle_subshell函数的计算结果是相反的。zle小部件是否存在一些我不知道的明显缺陷?用法是特殊情况。该行为似乎是为了:
zle-U字符串
…
这会将
字符串
中的字符推送到ZLE的输入堆栈上。在当前执行的小部件完成后,ZLE将表现为用户键入了字符串
中的字符
由于ZLE使用堆栈,如果重复使用此选项,将首先处理推到堆栈上的最后一个字符串。但是,每个字符串中的字符将按照它们在字符串中出现的顺序进行处理
--
因此,zsh的行为就像是在zle_子shell完成后键入的)
和$(
)
我们可以修改以直接更改编辑器缓冲区,如下所示:
function zle_subshell {
RBUFFER='$()'"$RBUFFER"
repeat 2 do zle .forward-char; done
# ((CURSOR=CURSOR+2)) # We could do this instead.
}
我想知道用zle-U…
实现堆栈背后的基本原理是什么。对于我的用例来说,肯定是意外的行为。我也想知道。它似乎只是为了好玩才添加的,因为我注意到我之前评论中的url没有正确的引用链接。因此,我想发布这些url以供参考rd: