惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
C
Check Point Blog
P
Proofpoint News Feed
H
Help Net Security
月光博客
月光博客
博客园_首页
Stack Overflow Blog
Stack Overflow Blog
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
U
Unit 42
美团技术团队
I
InfoQ
A
About on SuperTechFans

晚花行乐

马克卡尼在2026年达沃斯论坛上的讲话(阅读材料) | 晚花行乐 鸡娃如何用力才是恰到好处 | 晚花行乐 读万卷书,行万里路的辩证关系 | 晚花行乐 反对培训机构掐尖招生 | 晚花行乐 小泽和建国会谈最后10分钟全文(阅读材料) | 晚花行乐 来看看 DeepSeek 怎么鸡娃 | 晚花行乐 谈谈基本功 | 晚花行乐 惠普 ProDesk SFF PC 各系列参数对比 | 晚花行乐 解决瘦客户机上安装 Debian 12 启动失败问题 | 晚花行乐 意拾喻言:老外写的文言文 | 晚花行乐 笠翁对韵中的典故(十三元) | 晚花行乐 谈谈中考取消四小门 | 晚花行乐 亚马逊云科技产品免费试用攻略(3) - 对象存储服务 | 晚花行乐 在 Windows 10 LTSC 版本上安装 WSL2 | 晚花行乐 Debian 12 的常用配置项 | 晚花行乐 在 Debian 12 上安装 Nvidia 显卡驱动程序 | 晚花行乐 解决 Debian 12 关机失败问题 | 晚花行乐 解决 VS Code 自动更新版本后卡在连接界面 | 晚花行乐 观看巴黎奥运会有感 | 晚花行乐 在 Windows10 上安装惠普旧打印机驱动程序 | 晚花行乐 欢迎关注公众号:晚花行乐 | 晚花行乐 如何编写拼写检查器 | 晚花行乐 亚马逊云科技产品免费试用攻略(2) - 云服务器 | 晚花行乐 Pandas 中 axis 参数的理解(附实例) | 晚花行乐 我打算命个名,叫什么什么 Manager | 晚花行乐 上海武康路历史建筑一览 | 晚花行乐 Python 实现简单的数学表达式解析并处理 | 晚花行乐 观看马拉松的感悟 | 晚花行乐 Python 保存 Cookies 到文件并再次读取 | 晚花行乐 如何为 Hugo 静态网站添加评论功能 | 晚花行乐
Powershell 修改提示符的文字内容和颜色 | 晚花行乐
2021-08-24 · via 晚花行乐

PowerShell 自带的提示符不够美观,影响工作效率。本文介绍一种自定义 PowerShell 命令提示符的方法。

效果展示

作为从 Mac 的 iTerm 迁移到 Windows 的用户,我个人喜欢简单风格的提示符。类似下面这种:

所以当使用上 PowerShell 后,我自然也希望能延续相同的风格。类似下面这种:

上图就是我改造 PowerShell 提示符的效果。下面介绍如何实现这种效果。

ps1 文件

ps1 文件类似 linux 的 ~/.profile 文件,在 shell 初始化时会预先执行。在 Powershell 中, ps1 文件的路径保存在 $Profile 变量中,输入 echo $Profile 命令能看到它的绝对路径:

编辑这个文件,就能规定 Powershell 初始化时的一些行为。

如果是第一次使用 Powershell ,这个文件并不存在,需要你手动创建,输入 notepad $Profile 命令用记事本新建。

记事本会询问你是否新建,选择"是"。

这样就得到了一个 ps1 文件,用于自定义 Powershell 的行为。

prompt 函数

Powershell 有一个特殊的函数: prompt 函数,这个函数规定了提示符的内容和外观。默认的 prompt 函数规定了提示符的默认外观,也就是这样:

我们可以在 上节 中介绍的 ps1 文件中再次自定义 prompt 函数,实现函数的重载,覆盖原有函数的功能。

查看当前使用的 prompt 函数

利用下面的命令可以查看当前使用的 prompt 函数的内容:

(Get-Command Prompt).ScriptBlock

例如:

图中返回的函数体(“V -")的具体含义,在下节中会介绍。

prompt 函数的基本格式

prompt 函数 的基本格式为:

function Prompt {
  # 编辑你的内容
  return ""
}

如同 上节 中提到,我们只需要在 ps1 文件中重新写 prompt 函数即可。

函数体的最后一个表达式默认就是返回值,所以 return 关键字可以省略。

修改 prompt 函数

通过 prompt 函数的返回值我们就能自定义提示符。返回值可以是固定的字符串,也可以是 powershell 提供的函数。例如:

固定字符串

函数最后一行固定字符串就规定了提示符的内容

function Prompt {
  "R |"
}

效果如下图:

这中写法就解释了 这一节 中(“V -")函数体的意义。

函数返回值

大部分函数返回值是 Object 类型,并不是字符串格式,用双引号可以强制转换为字符串类型。例如

function Prompt {
    "$(Get-Date)> "
}

上面这个 prompt 函数将提示符显示为当前时间,效果如下:

使修改生效

当修改并保存 ps1 文件后,还需要执行 ps1 文件才能使最新的修改生效。

类似 linux 环境下的 source 命令。在 Powershell 中,使用点号 . 来重新加载指定的 ps1 文件。由于 $Profile 变量保存了 ps1 文件的绝对路径,所以可以用下面的命令使改动实时生效。

. $Profile

结合下面的例子,我们一起观察修改并生效的全部过程。

首先你在 ps1 文件中写入:

function Prompt {
    "R |"
}

输入 . $Profile 命令生效。再修改 prompt 函数为:

function Prompt {
    "V -"
}

输入 . $Profile 命令生效。完整的效果如下图:

具体实现

有了上面的知识储备,现在我们可以编写函数,以实现 效果展示 一节中的效果。

步骤思路

为了实现效果展示 一节中的效果,思路如下:

  1. 获取当前路径
  2. 获取用户主目录
  3. 将当前路径中的主目录部分,替换为波浪线(~)
  4. 将替换后的结果加上颜色

下面分步骤来实现。

1. 获取当前路径

使用下面的语句获取当前路径:

$promptString = "$(Get-Location)"

得到类似: C:\Users\name\some\path 这样的字符串。

2. 获取用户主目录

使用下面的语句获取当前路径:

$homepath = $env:userprofile

得到类似这样的: C:\Users\name

用户主目录路径中有反斜杠,不能直接用作正则表达式的 pattern,需要将单斜杠转换为双斜杠:

$pattern = $homepath -replace '\\', '\\'

得到类似这样的: C:\\Users\\name

3. 将当前路径中的主目录部分,替换为波浪线(~)

$promptString = $promptString -replace $pattern, "~"

C:\Users\name\some\path 这样的路径被替换为 ~\some\path

4. 将替换后的结果加上颜色

加上颜色控制符:

return "`e[1;32m" + $promptString + "`e[m "

5. 合成到一起作为函数体

上面的四步 合成到一个函数内,效果如下:

function Prompt {
    $promptString = "$(Get-Location)"
    $homepath = $env:userprofile
    $pattern = $homepath -replace '\\', '\\'
    $promptString = $promptString -replace $pattern, "~"
    return "`e[1;32m" + $promptString + "`e[m "
}

步骤简化后的最终版:

function Prompt {
    $pattern = $env:userprofile -replace '\\', '\\'
    $promptString = "$(Get-Location)" -replace $pattern, "~"
    "`e[1;32m" + $promptString + "`e[m "
}

调试

如果编写的 Prompt 函数有语法错误,Powershell 不会抛出错误,而只会显示为默认的外观。如果想要调试,可以在命令行中直接执行 prompt (对大小写不敏感),下图展示了估计写错命令后的抛错提示:

显示 git 信息

借着 prompt 函数的灵活编程,我们可以获取 iterm 中的 git 信息,并显示在提示符后方。如下图所示:

具体的作法另开一篇单独介绍:Powershell 在提示符中显示 git 分支信息

各位读后有什么想法,请在下方留言吧!如果对本文有疑问或者寻求合作,欢迎 联系邮箱邮箱已到剪贴板

精彩评论