我今天早上注意到了这个错误,但我认为我昨晚没有改变任何东西,所以我现在很困惑。也许我更新了系统上的一些实用程序,但它以某种方式破坏了向后兼容性。基本上我math: Error: Missing operator
在使用制表符补全时遇到了错误。
假设我输入fish
,然后点击以获取类似和 的Tab建议(这里有一个 asciinema 截屏视频,以防您想查看它的实际效果:fish_config
fish_add_path
https://asciinema.org/a/L3xr32eVMGHuCY0Gjr19gFzCu)
[I] ~ $ fishmath: Error: Missing operator
'Wed Dec 31 18:00:00 CST 1969 - 1655913830'
^
[I] ~ $ fish_config
fish (command)
fish_add_path
fish_breakpoint_prompt
fish_clipboard_copy
…and 29 more rows
制表符补全确实有效,但错误看起来很烦人。看起来我正在尝试评估数据字符串或其他东西。如何诊断错误?
我使用的是 macOS 蒙特利。这是我的~/.config/fish/config.fish
。
set -px PATH /opt/local/bin /opt/local/sbin
set -px PATH $HOME/.local/bin
set -px PATH $HOME/bin
set -px PATH /Applications/MacPorts/Alacritty.app/Contents/MacOS
set -px PATH $HOME/Foreign/drawterm
set -px PATH $HOME/google-cloud-sdk/bin
set -x XDG_CONFIG_HOME $HOME/.config
set -x PIPENV_VENV_IN_PROJECT 1
set -x PLAN9 /usr/local/plan9
set -px PATH $PLAN9/bin
if test -e $HOME/.config/fish/sensitive.fish
source $HOME/.config/fish/sensitive.fish
end
if status is-interactive
# Commands to run in interactive sessions can go here
alias vi='/opt/local/bin/nvim'
set -gx EDITOR /opt/local/bin/nvim
source /opt/local/share/fzf/shell/key-bindings.fish
end
set -g fish_key_bindings fish_hybrid_key_bindings
alias matlab='/Applications/MATLAB_R2021b.app/bin/matlab -nodisplay'
zoxide init fish | source
direnv hook fish | source
# The next line updates PATH for the Google Cloud SDK.
if [ -f '/Users/qys/google-cloud-sdk/path.fish.inc' ]; . '/Users/qys/google-cloud-sdk/path.fish.inc'; end
答案1
删除该行后,错误消失set -px PATH $PLAN9/bin
。我想这是因为我不小心将一些系统实用程序与它的对应项隐藏起来用户空间的计划 9。
另一种解决方法是使用set -ax PATH $PLAN9/bin
。通过使用-a
,目录$PLAN9/bin
会被附加到$PATH
(与使用 时的前置相反-p
),因此 中已经存在的命令$PATH
优先于 Plan 9 的命令。
答案2
这里发生的情况是,fish 尝试完成命令,并尝试通过调用向命令添加描述apropos
。
在 macOS 上,这非常慢,因为 Apple 的沙箱破坏了 Whatis 数据库。
因此,fish 添加了自己的缓存,并且该缓存每周更新一次。
只是为了检查那个日期,它运行:
set age (math (date +%s) - (/usr/bin/stat -f %m $whatis))
给出date
格式+%s
说明符以获取 UNIX 纪元。
你已经date
用(典型的)超极简主义来取代计划9版本,它不接受格式参数,因此最终会打印完整的日期,这使得数学表达式格式错误。
一般来说,fish 假设有一个相当标准的 unix 用户空间,因此在前面添加 Plan 9 工具(实际上不是)是一个坏主意。