我所做的所有工作都位于 icloud 目录中,这使得我的bash
提示很长:
~/Library/Mobile Documents/com~apple~CloudDocs/Projects/foo/bar/baz @master $
我的提示是:
PS1='\w\[\e[1;35m\]$(__git_ps1 " @%s") \[\e[1;32m\]\$\[\e[m\] '
/Library/Mobile Documents/com~apple~CloudDocs/
是否可以仅将in的出现替换\w
为类似的内容,icloud
从而产生如下更好的提示?
~/icloud/Projects/foo/bar/baz @master $
答案1
Zsh 具有“命名目录”功能,它几乎也会自动缩写提示中的目录名称。我不认为 Bash 具有等效功能,但您可以通过PROMPT_COMMAND
运行自定义函数来设置变量,然后在 using 的提示 insetad 中打印来解决它\w
。
/tmp/test
例如,这应该用 替换路径中的首字母~testdir
。
set_promptpath() {
promptpath=$PWD;
# do whatever replacement you like here
promptpath=${promptpath/#\/tmp\/test/\~testdir}
}
PROMPT_COMMAND=set_promptpath
PS1='$promptpath\$ '
答案2
cwd
我通过使用动态更新路径的函数,使用 @ilkkachu 的部分答案解决了这个问题:
cwd() {
cwd=${PWD/\/Users\/htor/\~}
echo ${cwd/\Library\/Mobile Documents\/com~apple~CloudDocs/icloud}
}
PS1='$(cwd)\[\e[1;35m\]$(__git_ps1 " @%s") \[\e[1;32m\]\$\[\e[m\] '
虽然不太漂亮,但至少我的提示又漂亮了!