如何基于路径前缀为Starship Prompt的[directory]设置条件化颜色?
在Starship Prompt中复刻路径前缀条件化目录颜色/标识功能
方法1:条件化设置目录颜色
直接修改Starship配置里的directory模块,利用模板语法根据路径前缀切换颜色:
打开你的Starship配置文件(默认路径是~/.config/starship.toml),找到[directory]区块,修改style字段:
[directory] # 单前缀判断:路径包含/work/projects时用粗体黄色,否则用蓝色 style = "{{ if contains $PWD "/work/projects" }}bold yellow{{ else }}blue{{ end }}" # 多前缀判断示例:匹配不同前缀用不同颜色 # style = "{{ if contains $PWD "/work/projects" }}bold yellow{{ else if contains $PWD "/private" }}bold red{{ else }}blue{{ end }}"
这里$PWD是Starship内置的当前工作目录变量,contains是模板函数,用于判断路径是否包含指定前缀。你可以替换示例中的路径和颜色样式来适配自己的需求。
方法2:添加自定义标识(类似只读锁)
如果需要像read_only选项那样给特定前缀的目录添加额外标识(比如🔒、🔧),可以通过prefix或suffix字段结合条件实现:
[directory] style = "blue" # 路径匹配/private前缀时,在目录名称前添加锁形标识 prefix = "{{ if contains $PWD "/private" }}🔒 {{ else }}"" # 也可以选择在目录名称后添加标识 # suffix = "{{ if contains $PWD "/private" }} 🔒{{ else }}""
方法3:自定义模块(复杂场景适配)
如果上述方法不够灵活,还可以创建自定义模块专门处理路径前缀的条件标识:
- 在配置文件中添加自定义模块:
[custom.path_prefix_indicator] # 用bash命令判断路径前缀,输出对应标识 command = """bash -c 'if [[ "$PWD" == "/work/projects"* ]]; then echo "🔧"; elif [[ "$PWD" == "/private"* ]]; then echo "🔒"; fi'""" # 标识的显示样式 style = "bold cyan" # 模块与其他prompt元素的分隔符 prefix = " " suffix = " " # 只有当匹配到目标前缀时才显示模块 when = """bash -c '[ -n "$(if [[ "$PWD" == "/work/projects"* ]] || [[ "$PWD" == "/private"* ]]; then echo 1; fi)" ]'"""
- 把自定义模块加入到prompt的显示顺序中,找到
format字段,将$custom.path_prefix_indicator放在$directory附近的位置:
format = """$custom.path_prefix_indicator$directory$git_branch$git_status..."""
注意事项
- 颜色样式支持
bold、italic等修饰符,颜色可以用名称(如red、blue)或十六进制值(如#ff0000) - 修改配置后可以用
starship preview命令实时预览效果,无需重启终端
内容的提问来源于stack exchange,提问作者paime
相关产品推荐
相关产品推荐

