设置Powershell终端

Intro

提到shell,似乎大家首先想到Linux,其实Windows的Powershell也是非常好的命令行界面。同时由于Powershell默认状态下已经把很多常用的基础bash命令(如cdls)都设置成了别名,因而对于一些常用操作基本上可以当成bash来用。当然还有一些缺失,比如whichtouch等命令,则需要通过自定义函数利用Powershell命令实现。另一方面,Powershell的蓝色背景白色字符实在是缺乏美感,也影响日常使用,因而需要选择一个终端并进行美化工作。因而本文首先介绍几个自定义的常用函数的方法,同时进一步介绍使用oh-my-posh和Windows Terminal构建美观的Powershell终端。

常用bash命令实现

由于powershell自带的别名有缺失或默认功能与bash命令有所不同,因而需要自定义和重载一些函数。这些函数需要在profile.ps1中定义,这样每次打开powershell时即可自动加载。以下介绍3个常用命令。

ls

ls时Powershell自带的别名,然而其输出的结果默认为完整信息形式且没有用不同颜色表示文件夹或文件。

image

这里使用Get-ChildItemColor实现不同文件类型以不同颜色显示,同时增加不同别名来实现仅列出文件名和列出详细文件信息功能。

该Cmdlet可以直接从Powershell Gellery中安装


Install-Module -Name Get-ChildItemColor -Scope CurrentUser

profile.ps1中加入:

# Ensure that Get-ChildItemColor is loaded
Import-Module Get-ChildItemColor
# Set l and ls alias to use the new Get-ChildItemColor cmdlets
Set-Alias l Get-ChildItemColor -Option AllScope
Set-Alias ls Get-ChildItemColorFormatWide -Option AllScope

进而实现使用ls列出文件名,使用l列出详细列表。

image

touch

Powershell默认没有定义touch命令的别名,这里使用以下函数使用New-Item实现touch


function touch($name)
{
    if ($name) {
        $file_path = Split-Path -Path $name
        $file_name = Split-Path -Path $name -Leaf
        if ($file_path -eq "") {
            $file_path = "."
        }
        if (-Not (Test-Path($file_path))) {
            New-Item -ItemType "directory" -Path $file_path
        }
        New-Item -Path $file_path -Name $file_name -ItemType "file"
    }
    else {
        Write-Host "Command to create new file."
    }
}

which

Powershell默认也没有定义which,这里用Get-Command实现which

function which($name)
{
    Get-Command $name | Select-Object -ExpandProperty Definition
}

~

Powershell没有使用~来代表用户目录,可以通过简单的Set-Alias来实现。

function cuserprofile { Set-Location ~ }
Set-Alias ~ cuserprofile -Option AllScope

终端美化

终端美化有两个目标,一是配色及字体,二是Prompt的主题,且支持Git repo的状态指示。

Windows Terminal

默认的Powershell终端支持有限的颜色,自定义能力极其有限,因而这里选用2019年发布的Windows Terminal来作为终端模拟器。

Windows Terminal可以从Microsoft Store安装。

https://www.microsoft.com/en-us/p/windows-terminal-preview/9n0dx20hk701

Windows Terminal中的Powershell:


image

点击Windows Terminal的Settings会直接打开profiles.json文件。在其中可以进行各种个性化设置。以下是修改后的效果以及其对应的json配置文件。

image
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false,
                "colorScheme": "Cobalt2",
                "fontFace": "Cascadia Code PL",
                "background": "#000000",
                "useAcrylic": true,
                "acrylicOpacity": 0.8,
                "fontSize": 10,
                "backgroundImageStretchMode": "none",
                "backgroundImageOpacity": 0.1,
                "backgroundImageAlignment": "bottomRight"

            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "commandline": "cmd.exe",
                "hidden": false
            },
            {
                "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
                "hidden": false,
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure"
            }
        ]
    },

    // Add custom color schemes to this array
    "schemes": [
        {
            "name": "Cobalt2",
            "black": "#000000",
            "red": "#ff0000",
            "green": "#38de21",
            "yellow": "#ffe50a",
            "blue": "#1460d2",
            "purple": "#ff005d",
            "cyan": "#00bbbb",
            "white": "#bbbbbb",
            "brightBlack": "#555555",
            "brightRed": "#f40e17",
            "brightGreen": "#3bd01d",
            "brightYellow": "#edc809",
            "brightBlue": "#5555ff",
            "brightPurple": "#ff55ff",
            "brightCyan": "#6ae3fa",
            "brightWhite": "#ffffff",
            "background": "#132738",
            "foreground": "#ffffff"
        }
    ],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

其中,这里选用的配色主题是Cobalt2,它是iTerm Color Schemes中的一个主题,更多适用于Windows Terminal的配色可以从这里下载:
https://github.com/mbadolato/iTerm2-Color-Schemes/tree/master/windowsterminal。
只需要作为字典加入"schemes"这里列表里就行了。

这里字体使用了配合Windows Terminal发布的Cascadia字体。https://github.com/microsoft/cascadia-code/releases/download/v1911.21/CascadiaPL.ttf

oh-my-posh

oh-my-posh (https://github.com/JanDeDobbeleer/oh-my-posh) 收到oh-my-zsh的启发,实现了漂亮的prompt主题。

安装:

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

其中,posh-git用于显示git的状态。

安装之后,在powershell的profiles.ps1中加入:

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

oh-my-posh支持几个主题(可以在github上找到具体介绍),这里使用个人认为效果最好的Paradox主题。

安装后的效果如下图:

image

总结

本文通过编辑Powershell的profiles.ps1使用powershell函数实现了几个常用的bash命令lswhichtouch,同时介绍了利用oh-my-posh结合Windows Terminal的颜色字体个性化实现prompt主题自定义的方法。

你可能感兴趣的:(设置Powershell终端)