首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >zle向后焦不能按预期工作。

zle向后焦不能按预期工作。
EN

Stack Overflow用户
提问于 2017-09-29 00:59:23
回答 1查看 226关注 0票数 1

我正在编写一个简单的ZLE小部件,以便使用<C-j>快速创建子subshells。我现在拥有的是:

代码语言:javascript
复制
function zle_subshell {
  zle -U '$()'
  zle .backward-char
}

# register as widget
zle -N zle_subshell

# create kbd
bindkey '^j' zle_subshell

然而,zle .backward-char似乎不起作用。更令人困惑的是,如果我将脚本修改为:

代码语言:javascript
复制
function zle_subshell {
  zle -U '$('
  zle -U ')'
  zle .backward-char
}

我得到的输出像)$(..。

看来zle_subshell函数是反向计算的。我不知道的ZLE小部件有什么明显的问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-01 00:12:09

zle -U的用法是特例。看来这种行为的目的是:

zle -U string ..。 这会将string中的字符推到ZLE的输入堆栈上。在当前执行的小部件完成后,ZLE将表现为用户输入了string中的字符。 由于ZLE使用堆栈,如果重复使用此选项,将首先处理推到堆栈上的最后一个字符串。但是,每个string中的字符将按照它们在字符串中的出现顺序进行处理。-- zle -U

因此,zsh将表现为)$(是在zle_subshell完成后输入的。

我们可以修改(R)BUFFER以直接更改编辑器缓冲区,如下所示:

代码语言:javascript
复制
function zle_subshell {
  RBUFFER='$()'"$RBUFFER"
  repeat 2 do zle .forward-char; done
  # ((CURSOR=CURSOR+2)) # We could do this instead.
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46480281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档