ZSH中类似鱼的参数完成搜索


8

我在摆弄鱼,发现这种方便的行为

如果输入wget -<tab><tab><tab>,则会进入交互式菜单。但是,键入时,我搜索了参数本身的描述。我在zsh中尝试了此操作,在此菜单中键入内容似乎只能使我回到交互式提示中。有没有办法在zsh中实现类似的功能?


我很想知道如何做很长时间。当涉及到标准关键字补全(不是选项)时,vim允许您配置补全以保持对行缓冲区的关注,这样,如果补全列表太长,您只需继续输入,列表自然就会被过滤掉。但是zsh立即将焦点切换到了菜单选择小部件
the_velour_fog '17

我不了解您所描述的行为。这是关于搜索选项描述而不是选项名称的信息吗?还是这是关于选择的导航方式?您指的是什么菜单(zsh具有很多不同的完成设置)?
吉尔斯(Gilles)'“ SO-别再邪恶了”

@Gilles是的,您可以使用它来搜索选项的描述,甚至搜索选项名称本身。当您键入命令,破折号,然后按两次Tab键时,将出现我指的菜单。例如,键入ls -<tab><tab>将我输入菜单,我可以在其中上下滚动不同的选项。在鱼中,我可以键入,然后将搜索这些选项及其描述。我希望在zsh中实现类似的功能。
奥利安(Ollen)'17

我仍然不确定您的确切意思。您想要互动吗?即能够从带有箭头和突出显示选项的列表中进行选择?您说In fish, I'm able to type, which will then search these options and their descriptions.可以在zsh中“搜索这些选项及其描述”。例如,ls --h<tab>搜索以开头的选项,--h并列出四个匹配项。
Sparhawk

看一下这个截图。如果输入,ls -size<tab>我会得到ls --block-size和ls --size作为zsh中的选项。但是,fish建议我--size,--tabsize,-k,-S,--block-size和--human-可读。我希望在zsh中实现类似的功能。它不仅搜索命令的名称,还搜索描述
ollien

Answers:


1

我认为这可以满足您的需求:

  zmodload zsh/complist
  setopt menucomplete
  zstyle ':completion:*' menu select=0 search

这将导致列表在您单击选项卡时显示,然后,如果您继续键入,它将以增量搜索方式搜索可用选项(包括说明)。

您可能也对相同的配置感兴趣,但是使用交互式而不是搜索。在这种情况下,当您键入内容时,它将把补全内容过滤为仅与您到目前为止键入的内容匹配的内容。


嗯...如果我键入wget -<tab>no此命令,则不会过滤完成列表。这只是继续在终端后面输入“ no” --accept-regex=,这是完成列表中的第一个选项。
奥利安

1
嗯,那不是我发生的事情。但是它实际上并不适合搜索选项,它只是对可能性进行增量搜索
Thayne

1

尝试将其放入您的.zshrc文件中:

 # load module for list-style selection
 zmodload zsh/complist

 # use the module above for autocomplete selection
 zstyle ':completion:*' menu yes select

 # now we can define keybindings for complist module
 # you want to trigger search on autocomplete items
 # so we'll bind some key to trigger history-incremental-search-forward function
 bindkey -M menuselect '?' history-incremental-search-forward

现在,如果您键入wget -<tab>带有自动完成功能的菜单,则会出现。我们为此菜单定义了键绑定,因此,如果您按?搜索键,则会在完成内容的顶部出现:

davidsykora~%wget --referer
isearch: refe

一些其他提示:

  • 您还可以定义 bindkey -M menuselect '/' history-incremental-search-backward向后搜索
  • 如果您?在搜索过程中再次按下,则选择将跳至下一个搜索结果。使用/了跳转到前一个结果
  • 要使其按预期工作,需要进行大量调整,因此请查看complist 文档以查找其他功能和选项。
  • 对我来说,使用vi-insertcomplist函数通常要快得多-它会根据您输入的内容过滤补全。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.