自定义炫酷powershell(美化)
- linux上的bash和zsh之类的命令行终端炫酷无比。
- window上的cmd和powershell丑的不忍直视。
- 很久之前不知参考谁的一篇文章自定义了一下,还算勉强能看得过去。重装电脑时候发现了,便记录一下。
- 自定义代码不怎么难,谁要是有时间精力去github上专门开一个项目,肯定能收获很多 star !!
怎么使用自定义配置文件不多说了,请看本文最后面,或者官方文档
https://technet.microsoft.com/zh-cn/library/bb613488
先看效果
直接上干货
#以后要 使用 ll 而不是 ls了。
set-alias ll Get-ChildItemColor
function prompt
{
# $my_path 获取当前所在目录
$my_path = $(get-location).toString()
$my_pos = ($my_path).LastIndexOf("\") + 1
# 下面的 if-else 语句用来获得文件路径的最后一个目录名
# 比如 c:/user/xiaoming , 则 $my_path_tail 的内容是 xiaoming
# 主要为了命令行终端的提示简洁一些, 根据需要自己修改
if( $my_pos -eq ($my_path).Length ) { $my_path_tail = $my_path }
else { $my_path_tail = ($my_path).SubString( $my_pos, ($my_path).Length - $my_pos ) }
# 下面一堆 write-host 定义了终端提示格式。
Write-Host ("[") -nonewline -foregroundcolor 'Cyan'
Write-Host ("Blueky") -nonewline -foregroundcolor 'Cyan'
Write-Host (" @ ") -nonewline -foregroundcolor 'Cyan'
Write-Host ("WIN10 ") -nonewline -foregroundcolor 'Cyan'
Write-Host ($my_path_tail) -nonewline -foregroundcolor 'Cyan'
Write-Host ("]#") -nonewline -foregroundcolor 'Cyan'
return " "
}
function Get-ChildItemColor {
<#
.Synopsis
Returns childitems with colors by type.
.Description
This function wraps Get-ChildItem and tries to output the results
color-coded by type:
Directories - Cyan
Compressed - Red
Executables - Green
Text Files - Gray
Image Files - Magenta
Others - Gray
.ReturnValue
All objects returned by Get-ChildItem are passed down the pipeline
unmodified.
.Notes
NAME: Get-ChildItemColor
AUTHOR: blueky
#>
# 这个函数用来做正则匹配,并为不同的文件配置不同的颜色。
$regex_opts = ([System.Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [System.Text.RegularExpressions.RegexOptions]::Compiled)
$fore = $Host.UI.RawUI.ForegroundColor
$compressed = New-Object System.Text.RegularExpressions.Regex(
'\.(zip|tar|gz|rar|7z|tgz|bz2)', $regex_opts)
$executable = New-Object System.Text.RegularExpressions.Regex(
'\.(exe|bat|cmd|py|pl|ps1|psm1|vbs|rb|reg|sh)', $regex_opts)
$text_files = New-Object System.Text.RegularExpressions.Regex(
'\.(txt|cfg|conf|ini|csv|log)', $regex_opts)
$image_files = New-Object System.Text.RegularExpressions.Regex(
'\.(bmp|jpg|png|gif|jpeg)', $regex_opts)
Invoke-Expression ("Get-ChildItem $args") |
%{
if ($_.GetType().Name -eq 'DirectoryInfo') { $Host.UI.RawUI.ForegroundColor = 'Cyan' }
elseif ($compressed.IsMatch($_.Name)) { $Host.UI.RawUI.ForegroundColor = 'Red' }
elseif ($executable.IsMatch($_.Name)) { $Host.UI.RawUI.ForegroundColor = 'Green' }
elseif ($text_files.IsMatch($_.Name)) { $Host.UI.RawUI.ForegroundColor = 'Gray' }
elseif ($image_files.IsMatch($_.Name)) { $Host.UI.RawUI.ForegroundColor = 'Magenta' }
else { $Host.UI.RawUI.ForegroundColor = 'Gray' }
echo $_
$Host.UI.RawUI.ForegroundColor = $fore
}
}
function Show-Color( [System.ConsoleColor] $color )
{
$fore = $Host.UI.RawUI.ForegroundColor
$Host.UI.RawUI.ForegroundColor = $color
echo ($color).toString()
$Host