terminal&powershell

软件安装

1- 下载安装terminal

1. winget 安装

2- 下载安装powershell

2.1- 🗑PowerShell 7.3.0 随 PSReadLine 2.2.6 一起提供;

[!warning]+ 重要提醒
1. 不用再次安装posh-git
2. 不用单独安装和更新PSReadLine
3. 启用预测 IntelliSense
预测性 IntelliSense 默认禁用。
若要启用预测,只需运行以下命令:

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

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


Set-PSReadLineOption -PredictionSource None

3- 安装oh-my-posh

1. winget 安装(推荐)

3.1- 预览主题

[!help]+ 预览主题
方式 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” 的值.)

3.2- 安装主题(主题统一打包安装)


winget install JanDeDobbeleer.OhMyPosh -s winget

3.3- 更新主题


winget upgrade JanDeDobbeleer.OhMyPosh -s winget

3.3.1- 修改主题模板


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

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

ls $env:POSH_THEMES_PATH

或者用以下操作

echo $env:POSH_THEMES_PATH

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

4- 下载安装图形字体

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

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 目录下执行

5- 下载美化终端的图标


Install-Module -Name Terminal-Icons -Repository PSGallery

6- 下载安装oh-my-posh

6.1- 🚗引入第三方模块

6.1.1- powershell执行策略

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

# 更改执行策略
set-ExecutionPolicy RemoteSigned

# 查看执行策略
get-ExecutionPolicy

查看当前策略:

$OutputEncoding

如果是RemoteSigned,则设置成功。

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

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

7- PSColor模块

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

7.1- 命令行输入,安装模块

Install-Module PSColor

编辑配置文件

查看是否有powershell配置文件

Test-path $profile

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

New-item –type file –force $profile

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

notepad $PROFILE

1- 知识拓展

[!note]+ 备注

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

1.1- 创建并使用 PowerShell 配置文件

1.1.1- 创建 当前用户,当前主机配置文件

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

1.1.2- 创建所有用户、所有主机配置文件

if (!(Test-Path -Path $PROFILE.AllUsersAllHosts)) {
  sudo New-Item -ItemType File -Path $PROFILE.AllUsersAllHosts -Force
}

✈️代理设置

1- terminal设置代理

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


# http代理


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- 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"


配置文件

# 主题部分

## 主题格式
# 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

## 将PSModuleHistory变量设置为'S',以只显示成功执行的历史记录
Set-Item -Path Variable:\PSModuleHistory -Value S


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

## 自动导入并启用着色模块
# 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"




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