来自https://linux.die.net/man/1/zshmisc:
noglob
Filename generation (globbing) is not performed on any of the words.
zsh 示例:
$ ls /*
<lots of output>
$ noglob ls /*
ls: cannot access '/*': No such file or directory
$ ls "/*"
ls: cannot access '/*': No such file or directory
在鱼中,这适用于引号:
$ ls "/*"
ls: cannot access '/*': No such file or directory
鱼是否可以在不需要引号的情况下做同样的事情?
原始答案:关于
noglob
行为本身,我相当肯定答案是“否”,根据这个 Github 问题。编辑/更新: 但是考虑到您在评论中描述的用例,可能有另一种方法可以避免输入引号,尽管远不如
noglob
.为了使这尽可能简单,我在评论中与您的示例略有不同。根据该示例,您使用
noglob
in zsh 创建别名,以便:findf /path/*.ext
映射到find /path -name "*.ext"
我使用空格将路径和名称分隔为两个不同的参数:
findf /path *.ext
映射到find /path -name "*.ext"
好吧,有点-至少那是您要键入的内容。在这种情况下,解决方法是让 fish 在您
findf
使用*
通配符键入参数时自动为您添加周围的引号。为此,设置三个函数(其中两个只是单行),全部在
~/.config/fish/functions
:findf.鱼:
非常简单 - 只需将最后一个参数
findf
作为-name
参数传递给find
.然后才是真正的主力。 findf_binding.fish:
这基本上归结为“如果
*
被按下,并且该行以 开头,并且 尚未引用findf
带有 的参数,然后引用它并将光标移动到 之后。”*
*
最后,将 绑定
*
到fish_user_key_bindings.fishfindf_binding
中:完全披露 - 这是我在 fish 中的第一个键绑定脚本。这是我一直想学习/尝试一段时间的鱼功能,我认为这是一个很好的机会。结果,尽管如此,毫无疑问,我错过了一些极端情况,并且可以进行样式或语法改进。
例如,作为一个已知限制,如果您想使用通配符来匹配多个路径(例如
findf path* *.yaml
),此绑定也会错误地将引号添加到路径组件。但希望这能让你接近你正在寻找的东西,或者至少让你走上正确的轨道来调整它或编写你自己的东西。