目标
我正在尝试为我的终端提示符创建一个相对于我所在的存储库的缩短路径,类似于我已经为根目录和主目录创建的路径,如下所示。
以下终端提示符路径中显示的最后一个目录始终是当前工作目录。
根:
/ %
/rootDir %
/rootDir/dir1/dir2 %
/rootDir/.../dir2/dir3 %
/rootDir/.../dir3/dir4 %
家庭:
~ %
~/dir1/dir2 %
~/.../dir2/dir3 %
~/.../dir3/dir4 %
我正在尝试找到一种方法,让它在仓库中也能工作,仓库是“根”,而不是实际的根或home是路径的“根”。
存储库:
|repo %
|repo/dir1/dir2 %
|repo/.../dir2/dir3 %
|repo/.../dir3/dir4 %
"我所做的"
验证码:
autoload -Uz vcs_info
zstyle ':vcs_info:git:*' formats '|%r'
zstyle ':vcs_info:git:*' check-for-changes true
setopt PROMPT_SUBST
precmd()
{
vcs_info
if [ -d .git ];
then
PROMPT='${vcs_info_msg_0_}'
elif $(git rev-parse > /dev/null 2>&1);
then
PROMPT='${vcs_info_msg_0_}/%c'
else
PROMPT='%(4~|%-1~/.../%2~|%3~)'
fi
PROMPT+=' %# '
}
在根目录或主目录中的路径的解决方案非常简单:
PROMPT='%(4~|%-1~/.../%2~|%3~)'
这将检查从工作目录到最近的根目录或主目录的路径长度,并根据相对路径的目录长度显示两个不同路径中的一个。
但是我想不出一种方法来修改存储库,因为我现在有一个if..else来检查我的工作目录是否是存储库的“根目录”,或者我是否在存储库的更深处,使用这些来显示存储库的名称或者名称和当前工作目录。主目录,但我需要有当前长度之间的repo和工作目录或其他一些更简单的解决方案,我可能已经错过了。
1条答案
按热度按时间q0qdq0h21#
终于又有时间了。我最终想出了一个解决方案,达到了预期的效果:
不是最优雅的黑客,但不是很熟悉语法,这就是我想出的。
现在函数检查工作目录相对于.git文件的位置,该文件位于每个git仓库的根目录下。为了减少函数的检查量,函数首先使用if语句来检查当前目录是否位于git仓库中的任何位置。如果不是,则使用原帖子中的主目录和根目录路径的解决方案。