我正在尝试在我的 fish shell 提示符中生成 git status 。我遇到的问题是获取 git status 有点慢。所以,我想将当前的 git 状态保存在一个全局变量中,并且只在用户运行某些命令(例如“cd”和“git”)时更新它。我试图获取用户使用“历史”命令执行的最后一个命令,但结果好坏参半。这是我的代码:
function update_git_status --description 'Calculate new git current branch based on location and set __git_status'
set -g __git_status (python ~/.oh-my-fish/themes/oneself/gitstatus.py)
end
function fish_right_prompt
set -l git_color (set_color red)
set -l normal (set_color normal)
# Update git current branch when certain commands are run
switch $history[1]
case 'git *' 'cd *' 'cd'
update_git_status
end
# Git status
echo "$git_color$__git_status$normal"
end
这段代码的主要问题是,由于某种原因,历史并不总是立即返回最后一个命令。如果我运行“cd”或“git”以外的命令,然后 cd 进入 git 目录,则需要执行另一个命令才能将 git_status 更新为正确的字符串。
是否有其他方法可以在需要生成提示之前执行命令?
[更新]
这是尝试显示问题的终端输出:
~> history --clear
Are you sure you want to clear history ? (y/n)
read> y
History cleared!
~> echo $history[1]
~> ls
documents etc bin downloads Desktop media notes
~> echo $history[1]
ls
~> cd ~/.oh-my-fish/
~/oh-my-fish> echo $history[1]
cd ~/.oh-my-fish/
~/oh-my-fish> master⚡
当我 cd 进入 git 目录(在本例中为 .oh-my-fish)时,分支名称应立即出现。但是,只有在我执行另一个命令之后它才最终出现。我认为“echo $history[1]”在命令行上返回正确的值,但不是从提示方法中运行时。
顺便说一句,这是我的 github 存储库的链接,其中包含所有这些代码:https ://github.com/oneself/oh-my-fish