Cmder中修改ls目录颜色并解耦master箭头标签颜色
我之前在WSL Ubuntu搭配Cmder、zsh+oh-my-zsh+powerlevel9k时也碰到过一模一样的问题,折腾了一阵找到几个可行的解决办法,分享给你:
方案一:强制在zsh中加载自定义dircolors配置
Cmder的全局配色确实会覆盖部分终端变量,导致dircolors-solarized的配置在zsh中不生效。我们可以让zsh启动时最后加载dircolors配置,确保优先级高于Cmder和oh-my-zsh的默认设置:
- 先确认你已经把dircolors-solarized克隆到了合适的位置,比如
~/.dircolors-solarized - 打开
~/.zshrc,在文件末尾添加以下内容:
# 先设置TERM为256色模式,确保dircolors正常识别 export TERM=xterm-256color # 加载dircolors-solarized的配置文件(根据你下载的主题选,比如ansi-dark) eval $(dircolors ~/.dircolors-solarized/dircolors.ansi-dark)
这样zsh启动时会最后执行这段代码,直接覆盖Cmder设置的LS_COLORS,同时不会影响powerlevel9k的Git标签颜色。
方案二:单独固定powerlevel9k的Git标签颜色
如果不想动dircolors,也可以直接给powerlevel9k的Git分支/箭头元素设置固定颜色,这样即使Cmder修改了全局配色,Git标签的颜色也不会变:
打开~/.zshrc,找到powerlevel9k的配置区域,添加以下设置(颜色值可以根据你的喜好调整):
# 设置Git分支文字的前景色和背景色 POWERLEVEL9K_VCS_BRANCH_FOREGROUND='black' POWERLEVEL9K_VCS_BRANCH_BACKGROUND='white' # 如果是箭头标签(比如指向master的箭头),可以设置对应的图标颜色 POWERLEVEL9K_VCS_COMMIT_ICON_FOREGROUND='green'
设置完后,你就可以放心用Cmder自带的配色修改工具调整ls的目录颜色了,Git标签颜色不会再跟着变化。
方案三:直接修改zsh的LS_COLORS变量
如果不想用dircolors-solarized,也可以直接手动设置LS_COLORS来修改目录颜色,这种方式最直接,优先级也最高:
在~/.zshrc末尾添加:
# 修改目录颜色为加粗蓝色(di代表directory,01是加粗,34是蓝色) LS_COLORS=$LS_COLORS:'di=01;34:' export LS_COLORS
颜色代码参考:30=黑、31=红、32=绿、33=黄、34=蓝、35=紫、36=青、37=白;01=加粗、04=下划线、05=闪烁。你可以根据需求组合这些代码。
补充说明:为什么dircolors-solarized在bash生效但zsh不生效?
因为zsh的初始化流程和bash不同,oh-my-zsh在加载过程中会重置LS_COLORS变量,而bash不会。把dircolors的加载命令放在.zshrc的最后,就能确保它在oh-my-zsh之后执行,覆盖掉默认的设置。
内容的提问来源于stack exchange,提问作者Anthony Lu

