1

我将我的一些点文件保存在版本控制中,这样我就可以在我们工作的所有众多服务器上对我的环境进行改进。当然,这包括我的 .zshrc。

我刚刚发现了有关绑定 ctrl-R 以histroy-incremental-pattern-search-backward通过历史记录进行模式搜索的方法,它非常有用,所以我将它放在我的 .zshrc 中,并兴高采烈地将它部署到任何地方。

问题是我们有些服务器安装了zsh 4.2.6版本,没有这个功能;在这些服务器上 ctrl-R 现在只是一种特别有效的打印方式No such widget `history-incremental-pattern-search-backward'

因此,我需要在我的 .zshrc 中提供一些可用的模式历史搜索功能,并在不可用的地方单独进行历史搜索;要么仅有条件地重新绑定密钥,要么将其绑定到任何一种方式都可以使用的东西。

我可以is-at-least用来测试 zsh 版本,如果我可以确定支持的最早版本history-incremental-pattern-search-backward,但如果可能的话,我宁愿更直接地测试(类似于功能检测背后的逻辑,而不是 Javascript 中的浏览器/版本检测)。

我发现这zle -l给了我一个已定义的小部件列表,但显然只有用户定义的小部件。我还没有找到任何其他方法来测试是否定义了小部件。

任何建议(或明确的知识,唯一的方法是通过版本号测试)将不胜感激。

4

1 回答 1

2

您非常接近正确答案,但您忘记了 RTFM ;-) 手册描述部分zle说:

-l [ -L | -a ]
      List all existing user-defined widgets.  If the -L option is
      used, list in the form of zle commands to create the widgets.

      When combined with the -a option, all widget names are listed,
      including the builtin ones. In this case the -L option is
      ignored.

果然:

$ zle -al | grep history-incremental-pattern-search-backward 
.history-incremental-pattern-search-backward
history-incremental-pattern-search-backward

所以你正在寻找的测试是:

zle -al | grep -q history-incremental-pattern-search-backward
于 2013-09-29T10:03:08.333 回答