Zsh 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

我正在编写一个简单的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_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: