zsh – 使用multios和大括号展开时展开小于号

使用zsh multios set(setopt multios),可以执行以下操作:

< in1 < in2 > out

和:

< in > out1 > out2

这很方便.

我想把这个功能与大括号扩展(setopt braceexpand)结合起来,所以当我说:

<in{1,2}^I

(^我是一个文字选项卡并调用完成系统),我希望它扩展为:

<in1 <in2 

但相反,我得到:

<in1 in2

有没有简单的方法来修改这种行为?

最佳答案
您希望的行为可以自动使用我现有的完成设置(通过几次压缩安装生成),因此我花了一些时间来缩小负责的特定设置.

核心功能由_expand“completer”提供.你可以这样包括它:

zstyle ':completion:*' completer _expand

如果您还使用_completer完成符,则需要首先列出_expand.例如,这是我的实际完成设置:

zstyle ':completion:*' completer _expand _complete _ignored _match _approximate _prefix

接下来,要启用大括号扩展,您需要启用替换.这是默认启用的,但你可以这样明确:

zstyle ':completion:*' substitute 1

如果您不希望在任何地方启用此功能,则可以全局禁用它并仅为_expand启用它,如下所示:

zstyle ':completion:*' substitute 0
zstyle ':completion:*:expand:*' substitute 1

我使用zsh版本4.3.11和5.0.2通过使用zsh -df启动一个新shell并获取包含以下内容的文件来测试它:

zstyle ':completion:*' completer _expand
zstyle ':completion:*' substitute 0
zstyle ':completion:*:expand:*' substitute 1
autoload -Uz compinit
compinit

(选项multios和no_ingore_brace(这是brace_expand别名的选项)是默认值,因此我不必显式更改它们.)

然后,我输入cat< in {1,2}并按Tab键.您需要多次按Tab键:每个扩展变体一次,再到一次“所有扩展”条目(上例中总共三次);我没有办法让这个特殊的条目成为第一.

转载注明原文:zsh – 使用multios和大括号展开时展开小于号 - 代码日志