我一直在努力解决一个问题,但我找不到任何地方提到过这个问题,也无法追踪。我无法利用 fish 中的任何别名命令功能,这也会破坏依赖该命令的 fish 集成(例如zoxide init fish
)。我可以手动定义别名(毕竟它们只是函数),但像这样的命令alias ls "ls -lah"
不起作用。
我怀疑它似乎更喜欢将其解释alias
为 macOS 可执行文件,而不是内置的 fish:
> alias foo="echo foo"
> foo
fish: Unknown command: foo
> type -a alias
alias is /usr/bin/alias
> alias --help
/usr/bin/alias: line 4: alias: --: invalid option
alias: usage: alias [-p] [name[=value] ... ]
我在我的配置中手动定义了许多鱼别名并且它们可以工作,只是alias
内置的本身似乎坏了。
跟进
有些人要求提供不适合在评论中添加的更多详细信息:
> fish --version
fish, version 3.7.0
> set -S fish_function_path
$fish_function_path: set in global scope, unexported, with 6 elements
$fish_function_path[1]: |/Users/<REDACTED>/.config/fish/functions|
$fish_function_path[2]: |/opt/homebrew/etc/fish/functions|
$fish_function_path[3]: |/Users/<REDACTED>/.local/share/fish/vendor_functions.d|
$fish_function_path[4]: |/opt/homebrew/Cellar/fish/3.7.0/share/fish/vendor_functions.d|
$fish_function_path[5]: |/opt/homebrew/share/fish/vendor_functions.d|
$fish_function_path[6]: |/opt/homebrew/Cellar/fish/3.7.0/share/fish/functions|
答案1
我只需使用abbr
反而:
abbr -a ls ls -lah
缩写更好,原因如下:
- 如果您覆盖基本命令(例如)
ls
,它们会让您根据需要跳过自动扩展。遇到这种情况并不罕见,如果发生这种情况,您不必暂时删除别名。 - 它们与自动完成功能配合得更好
- 它们将原始扩展命令保存在历史记录中。如果这是您自己的机器,并且您更喜欢保存别名来记住它们,那么这可能是一个小小的缺点。但除此之外,如果与多人一起工作,保存原始命令会使调试更容易。
答案2
原来问题出在函数自动加载- 我有一个~/.config/fish/functions/alias.fish
包含一些别名的文件,但这导致 fish 无法读取主定义,/opt/homebrew/Cellar/fish/3.7.0/share/fish/functions/alias.fish
因为 fish 明确查找名称与函数名称匹配的第一个文件。重命名文件解决了这个问题。