编辑命令行提示符 prompt,支持显示 git 分支、标签等信息

本文主要是介绍编辑命令行提示符 prompt,支持显示 git 分支、标签等信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实时在
Linhieng/current–Microsoft.PowerShell_profile.ps1 上更新

打开 $Profile 文件,将下面内容粘贴到其中即可:

<# 负责打印 git 分支相关信息支持输出以下信息:当前分支,或者是 hash 值当前目录是否为 git 子目录当前是否有提交历史
#>
function write_host_git_branch {# 在这里,能确保是一个 git 仓库,或者是一个 git 仓库中的子目录# 获取当前 HEAD 所在分支名。如果当前是 detached HEAD 状态,则显示为 hash。$git_branch = git symbolic-ref --short --quiet HEADWrite-Host "(" -ForegroundColor "DarkGray" -NoNewlineif ( $null -eq $git_branch ) {$hash = git rev-parse --short HEADWrite-Host $hash -ForegroundColor "red" -NoNewline} else {Write-Host $git_branch -ForegroundColor "blue" -NoNewline}Write-Host ") " -ForegroundColor "DarkGray" -NoNewlineif (# 如果当前目录没有 .git 文件夹,说明当前是在 git 仓库的子目录$false -eq (Test-Path .git)) {Write-Host "sub " -ForegroundColor "DarkGray" -NoNewline}$git_log = git log 2>&1if (# 命令执行失败$? -eq $false) {write_host_not_commits($git_log)}$tags = git tag --points-at HEADif ($null -ne $tags) {$tags_one_line =  ($tags -split '\r?\n') -join ', 'Write-Host "[" -ForegroundColor "DarkGray" -NoNewlineWrite-Host "$tags_one_line" -ForegroundColor "DarkYellow" -NoNewlineWrite-Host "] " -ForegroundColor "DarkGray" -NoNewline}# 打印子模块相关信息会有性能问题# $submodule = git submodule status 2>&1
}function write_host_not_commits($git_log) {$error_message = ($git_log.Exception.Message | Select-Object -First 1).Trim()if ($true -eq $error_message.EndsWith("does not have any commits yet")) {Write-Host "not commits yet"  -ForegroundColor "red" -NoNewline} else {Write-Host "❌fatal: $error_message" -ForegroundColor "red" -NoNewline}return
}function wirte_host_git_wrong($git_output) {# 转换为字符串对象,并只获取第一行的内容$error_message = ($git_output.Exception.Message | Select-Object -First 1).Trim()# 检查输出是否以指定的前缀开头if (# 空(非 git 仓库)$true -eq $error_message.StartsWith("fatal: not a git repository")) {Write-Host "" -NoNewline} elseif (# 不安全的仓库$true -eq $error_message.StartsWith("fatal: detected dubious ownership")) {Write-Host "❌fatal: detected dubious ownership" -ForegroundColor "red" -NoNewline} else {Write-Host "❌fatal: $error_message" -ForegroundColor "red" -NoNewline}
}function write_host_git_info {# 执行 Git 命令并捕获输出。 2>&1 表示将 stderr 重定向到 stdout, 以将错误信息保存在 $git_output 变量中$git_output = git rev-parse --is-inside-work-tree 2>&1if (# 前一个命令执行失败$? -eq $false) {wirte_host_git_wrong($git_output)return}write_host_git_branch
}# 判断当前是否是管理员
function has_admin_power {$identity = [Security.Principal.WindowsIdentity]::GetCurrent()$principal = [Security.Principal.WindowsPrincipal] $identity$adminRole = [Security.Principal.WindowsBuiltInRole]::Administratorreturn $principal.IsInRole($adminRole)
}function __prompt {# 空格原则:输出内容时,不需要考虑给前面留空,只需要考虑给后面留空$pwsh_version = "PS$($Host.version.Major) "$fullpath = "$($executionContext.SessionState.Path.CurrentLocation)"Write-Host "`n$pwsh_version" -NoNewlineWrite-Host "$fullpath " -NoNewline -ForegroundColor "green"write_host_git_infoif (has_admin_power) {return "`n# "} else {return "`n$ "}}# 主入口
function prompt {# 编写的代码可能报错try {__promptreturn} catch {# 输出报错信息Write-Host "powershell script error occurred: $_" -NoNewline -ForegroundColor "red"}return "`nPS> "
}# 解决终端的中文乱码问题。注意,chcp 无效!
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
# 设置 UpArrow 快捷方式为向前搜索
Set-PSReadLineKeyHandler -Key UpArrow -ScriptBlock {[Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchBackward()[Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
} # 设置向上键为后向搜索历史记录
# 设置 DownArrow 快捷方式为向后搜索
Set-PSReadLineKeyHandler -Key DownArrow -ScriptBlock {[Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchForward()[Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
}

这篇关于编辑命令行提示符 prompt,支持显示 git 分支、标签等信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/825749

相关文章

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬