terminal&powershell

1. 软件安装

1.1. 下载安装 terminal

  1. winget 安装

1.2. 下载安装 PowerShell

1.2.1. 🗑PowerShell 7.3.0 随 PSReadLine 2.2.6 一起提供

重要提醒

  1. 不用再次安装posh-git
  2. 不用单独安装和更新PSReadLine
  3. 启用预测 IntelliSense

预测性 IntelliSense 默认禁用。
若要启用预测,只需运行以下命令:

Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView

若要禁用预测 IntelliSense,只需运行

Set-PSReadLineOption -PredictionSource None

1.3. 安装 oh-my-posh

  1. winget 安装(推荐)

1.3.1. 预览主题

预览主题

方式 1: 官方在线预览: https://ohmyposh.dev/docs/themes

方式 2: 在 powershell 中输入命令: Get-PoshThemes

方式 3: 本地已安装的 oh-my-posh 主题, 可以在这个路径找到: C:\Users<UserName>\AppData\Local\Programs\oh-my-posh\themes

(ps: 这个路径就是环境变量 - “POSH_THEMES_PATH” 的值.)

1.3.2. 安装主题(主题统一打包安装)

winget install JanDeDobbeleer.OhMyPosh -s winget

1.3.3. 更新主题

winget upgrade JanDeDobbeleer.OhMyPosh -s winget

1.3.3.1. 修改主题模板

oh-my-posh --init --shell pwsh --config "$env:POSH_THEMES_PATH\主题名称.omp.json" | Invoke-Expression
1.3.3.1.1. 查看下载的主题

Oh-my-posh 自带多种主题,可使用以下命令检查

ls $env:POSH_THEMES_PATH

或者用以下操作

echo $env:POSH_THEMES_PATH

复制路径,使用资源管理器访问.

1.4. 下载安装图形字体

  1. nerd fonts字体下载安装
  2. links:Nerd Fonts 书呆子字体-图标字体聚合器,字形/图标收集,和字体修补程序

1.4.1. Windows 字体相关知识

  • 用户安装的字体都存放在 C:\Users\<用户名>\AppData\Local\Microsoft\Windows\Fonts 目录下,为所有用户安装的字体存放在 C:\Windows\fonts 目录下
  • 字体管理,在『设置 --> 个性化 --> 字体』中可以搜索并卸载字体,等同于在C:\Windows\fonts 目录下搜索并删除字体
  • 注意:在 C:\Users\<用户名>\AppData\Local\Microsoft\Windows\Fonts 目录下删除安装的字体会报错,因为 C:\Windows\fonts 目录下存有 C:\Users\<用户名>\AppData\Local\Microsoft\Windows\Fonts 中的字体引用,所以删除/卸载字体,应去C:\Windows\fonts 目录下执行

1.5. 下载美化终端的图标

Install-Module -Name Terminal-Icons -Repository PSGallery

1.6. 🚗引入第三方模块

1.6.1. powershell执行策略

安装完后开始菜单程序列表会出现刚刚安装的powershell,用管理员打开新的powershell,设置策略:

# 更改执行策略
set-ExecutionPolicy RemoteSigned

# 查看执行策略
get-ExecutionPolicy

查看当前策略:

Get-ExecutionPolicy

如果是RemoteSigned,则设置成功。

运行策略提示

Restricted:禁止运行任何脚本和配置文件
AllSigned:可以运行脚本,但要求所有脚本和配置文件由可信发布者签名,包括在本地计算机上编写的脚本。
RemoteSigned:可以运行脚本,但要求从网络上下载的脚本和配置文件由可信发布者签名;不要求对已经运行和已在本地计算机编写的脚本进行数字签名。
Unrestricted:可以运行未签名脚本。(危险!)

如果不设置策略,powershell将不能运行外部未签名脚本。

1.7. PSColor 模块

在默认情况下,PowerShell 的文件列表并不会彩色显示。
想要文件列表彩色显示的话,最简单的方法就是安装一个 PowerShell 模块:PSColor。

1.7.1. 命令行输入,安装模块

Install-Module PSColor

2. 编辑配置文件

查看是否有powershell配置文件

Test-path $profile

如果显示为false,手动创建一个:

New-Item -Type File -Force $profile

如果为true,则修改显示路径的配置文件。
也可以使用 $PROFILE 查看配置文件路径。

编辑配置文件:

notepad $PROFILE

2.1. 知识拓展

备注

  • 所有用户、所有主机 $PSHOME\Profile.ps1
  • 所有用户,当前主机 $PSHOME\Microsoft.PowerShell_profile.ps1
  • 当前用户、所有主机 $Home\Documents\PowerShell\Profile.ps1
  • 当前用户,当前主机 $Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

2.1.1. 创建并使用 PowerShell 配置文件

2.1.1.1. 创建 当前用户,当前主机配置文件

if (!(Test-Path -Path <PROFILE-NAME>)) {
  New-Item -ItemType File -Path <PROFILE-NAME> -Force
}

2.1.1.2. 创建所有用户、所有主机配置文件

# 需以管理员身份运行
if (!(Test-Path -Path $PROFILE.AllUsersAllHosts)) {
  New-Item -ItemType File -Path $PROFILE.AllUsersAllHosts -Force
}

3. ✈️代理设置

3.1. terminal 设置代理

# socks5代理
export ALL_PROXY=socks5://127.0.0.1:10808

# http代理

3.2. cmd 设置代理

# socks5代理
set ALL_PROXY=socks5://127.0.0.1:10808
set HTTP_PROXY=socks5://127.0.0.1:10808

# http代理

# 配置带验证的http proxy
set HTTP_PROXY=http://user:[email protected]:port

# 不带验证的
set http_proxy=http://127.0.0.1:1080
set https_proxy=http://127.0.0.1:1080

# 如果设置了验证
set HTTP_PROXY=http://proxy.com:port
set HTTP_PROXY_USER=username
set HTTP_PROXY_PASS=password

set HTTPS_PROXY=http://proxy.com:port
set HTTPS_PROXY_USER=username
set HTTPS_PROXY_PASS=password

# 清除proxy设置
set http_proxy=
set https_proxy=

3.3. powershell 设置代理

# socks5代理

$env:ALL_PROXY="socks5://127.0.0.1:11808"

# http代理
# PowerShell不支持socks5
$env:http_proxy="http://127.0.0.1:11809"
$env:https_proxy="http://127.0.0.1:11809"

# 带http认证的
$env:http_proxy="user:[email protected]:port"
$env:https_proxy="user:[email protected]:port"

4. 配置文件

# 主题部分

## 主题格式
# oh-my-posh --init --shell pwsh --config "你主题所在的路径,这里需要修改" | Invoke-Expression
# oh-my-posh --init --shell pwsh --config "$env:POSH_THEMES_PATH\主题名称.omp.json" | Invoke-Expression

## 默认主题
#oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\atomic.omp.json" | Invoke-Expression
### 将atomic主题替换为zash主题
# oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\zash.omp.json" | Invoke-Expression
### 将atomic主题替换为1_shell主题
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\1_shell.omp.json" | Invoke-Expression

### 主题名称备选:

#1_shell 
#atomic
#atomicBit
#chips
#cloud-native-azure
#jandedobbeleer
#kushal

##########################################################################
# 智能预测

## 启用预测 IntelliSense 并列表展示history
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView


##########################################################################
# 启用第三方模块

## 自动导入并启用着色模块
# Import-Module PSColor
## 自动导入美化终端的图标(好像和上面的有冲突,不能同时开启,根据需要二选一开启)
Import-Module -Name Terminal-Icons
## 这个工具主要做命令提示管理等操作,默认集成在了 PowerShell 中,不需要安装
Import-Module PSReadLine  


##########################################################################

# 快捷键 

## 删除上一个词 
Set-PSReadLineKeyHandler -Chord "Ctrl+w" -Function BackwardDeleteWord 

# 使用PowerShell内置的PSReadLine模块,它提供了一些快捷键的设置和自定义的功能。例如Set-PSReadLineOption -EditMode Emacs,这样就可以使用Ctrl+E跳转到行尾。
## 移动到当前行的起始位置
## 移动到当前行的末尾位置
Set-PSReadLineOption -EditMode Emacs

## 默认情况下,Tab 键的补全是行内补全,我们可以将其调整为带菜单的补全
Set-PSReadlineKeyHandler -Key Tab -Function  MenuComplete


## 设置 Ctrl+Z 为撤销
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo  
## 设置向上键为后向搜索历史记录
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward 
## 设置向下键为前向搜索历史记录
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward 


##########################################################################
# powershell 单独设置代理部分,根据需要开启

## http代理设置
$env:http_proxy = "http://127.0.0.1:20002"
$env:https_proxy = "http://127.0.0.1:20002"

## socks代理设置
## 将“代理服务器地址:端口号”替换为您的SOCKS代理服务器地址及端口。
$env:SOCKS_SERVER = "socks5://127.0.0.1:20001"  

## 设置SOCKS版本。SOCKS有SOCKS4和SOCKS5两个版本,运行以下命令设置:
$env:SOCKS_VERSION = "socks5"  


## 设置不走代理的地址。有些地址不需要走代理,可以通过设置no_proxy环境变量指定:
# $env:no_proxy = "localhost,127.0.0.1,localaddress,.example.com"



#############################################################################
## winget tab自动补全

Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock {
    param($wordToComplete, $commandAst, $cursorPosition)
    [Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new()
    $Local:word = $wordToComplete.Replace('"', '""')
    $Local:ast = $commandAst.ToString().Replace('"', '""')
    winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object {
        [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
    }
}


## scoop tab自动补全

# enable completion in current shell

Import-Module "$($(Get-Item $(Get-Command scoop.ps1).Path).Directory.Parent.FullName)\modules\scoop-completion"



##############################################################################