今天早上我注意到了这个错误,但我认为我昨晚没有改变任何东西,所以我现在很困惑。也许我更新了我系统上的一些实用程序,它以某种方式破坏了向后兼容性。基本上我math: Error: Missing operator
在使用制表符完成时出错。
假设我输入fish
,然后点击Tab以获取类似fish_config
and的建议fish_add_path
(这是一个 asciinema 截屏视频,以防您想看到它的实际效果: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 Monterey 上。这是我的~/.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
删除该行后错误消失
set -px PATH $PLAN9/bin
。我想这是因为我不小心将一些系统实用程序与来自 User Space 的 Plan 9中的对应项隐藏了起来。另一种解决方法是
set -ax PATH $PLAN9/bin
改用。通过使用-a
,目录$PLAN9/bin
被附加到$PATH
(而不是在使用时附加-p
),因此已经存在的命令$PATH
优先于计划 9 中的命令。这里发生的是 fish 尝试完成命令,并尝试通过调用
apropos
.在 macOS 上,这非常慢,因为 Apple 的沙盒会破坏 whatis 数据库。
因此,fish 改为添加自己的缓存,并且该缓存每周更新一次。
仅检查该日期,它运行:
给出格式说明符以获取 unix 纪元
date
。+%s
您已经覆盖
date
了(典型的)超极简Plan 9 版本,它不接受格式参数,因此它最终打印了一个完整的日期,这使得数学表达式格式错误。一般来说,fish 假设有一个相当标准的 unix 用户空间,因此预先添加 Plan 9 工具(不是)是一个坏主意。