【问题标题】:editing the ~/.zshrc file—how to add coloring to only directories and not the entire prompt?编辑 ~/.zshrc 文件——如何只为目录而不是整个提示添加颜色?
【发布时间】:2021-04-07 09:52:13
【问题描述】:

我只想为目录着色,而不是像 .txt 等其他文件。

这是我当前的 .zshrc:

PROMPT='%n%F{086}—%f%M %F{057}::%f %F{028}%~%f %F{057}»%f '

如果我去掉最后一个 %f PROMPT='%n%F{086}—%f%M %F{057}::%f %F{028}%~%f %F{057}» ' 它会将所有文件类型着色为相同的 057 颜色。

如何仅针对目录应用颜色并将它们自己的颜色与 057 颜色分开?

【问题讨论】:

  • 您需要配置您的ls 版本,而不是您的zsh 提示符。
  • @chepner 为什么使用ls 取出最后一个%f 时,PROMPT 变量会改变文件的颜色?
  • 不一定限于提示;每条指令只是告诉终端以特定颜色显示所有内容,直到您再次更改它。
  • @vertexgraph : 你的 PROMPT 中的哪个部分实际上显示了一个文件?我只是看到你的提示字符串中有你的工作目录。

标签: macos shell terminal zsh zshrc


【解决方案1】:

我可以根据man ls 编辑ls 为目录添加颜色

.zshrc 中添加:

alias ls='ls -G'

export CLICOLOR=1

export LSCOLORS=gxFxCxDxBxegedabagaced

文章Adding Color to Your macOS “ls” Output 或阅读man ls 有助于了解如何在LSCOLORS 变量中设置所需的颜色。

【讨论】:

    【解决方案2】:

    您无法通过提示配置命令行文件类型突出显示。发生的事情是,因为您没有重置前景色 (%f),它开始渗入您的命令行。

    如果您想突出显示命令行的某些部分,您需要执行以下操作:

    1. 创建一个函数。
    2. 在那里,解析文件名的命令行。您可以使用words=( ${(Z+C+)BUFFER} ) 将命令行拆分为shell 字。见http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags
    3. 使用glob qualifiers 过滤不同类型文件的外壳词。例如,dirs=( $^words(/) ) 将获取所有目录字词。
    4. 使用此信息和region_highlight special array 突出显示命令行的正确部分。
    5. 最后,使用add-zle-hook-widget 将您的函数设置为line-pre-redraw 钩子,这样每次重绘命令行时都会调用它。

    【讨论】:

    • 我正在寻找一种无需额外安装任何东西的方法。如果不添加最后一个%f 为它之后的所有其他内容着色,那么应该有一种方法可以针对特定文件类型指定它们应该是什么颜色?
    • 我更新了我的答案,说明了如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多