FluentTerminal 命令行工具配置

沈伟
2023-12-01
Import-Module DirColors
Import-Module posh-git
Import-Module oh-my-posh
Set-Theme PowerLine

# 根据历史记录预测补全
Import-Module PSReadLine
Set-PSReadLineOption -PredictionSource History
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

# 以后要 使用 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.UI.RawUI.ForegroundColor = $fore
}

# 在powershell终端里面输入 show-allcolor 就可以查看颜色,用来帮助自定义颜色主题
function Show-AllColor
{
    Show-Color('Black')
    Show-Color('DarkBlue')
    Show-Color('DarkGreen')
    Show-Color('DarkCyan')
    Show-Color('DarkRed')
    Show-Color('DarkMagenta')
    Show-Color('DarkYellow')
    Show-Color('Gray')
    Show-Color('DarkGray')
    Show-Color('Blue')
    Show-Color('Green')
    Show-Color('Cyan')
    Show-Color('Red')
    Show-Color('Magenta')
    Show-Color('Yellow')
    Show-Color('White')
}
 类似资料: