之前一直用mac比较多,用过oh-my-zsh的主题,里面对git的提示,还有路径的展示都挺好看。现在换了windows terminal之后一下子觉得挺不习惯,对PowerShell的命令也不太清楚,在这里捋一下常用的命令以及环境配置。(terminal在win10 新系统中直接可以在Store中下载安装)
PowerShell的介绍以及常用命令可以在这篇 Powershell介绍以及常用命令文章中了解
配置完的效果
常用变量
用户配置
-
$profile.CurrentUserAllHosts
,当前用户所有Hosts都会调用的用户配置,Terminal加载时候会先读取这个文件,再去读取$profile
文件 -
$profile
或$profile.CurrentUserCurrentHost
, 查看powershell启动时候当前用户加载的配置文件 -
$date = get-date -format "yyyy.MM.dd HH:mm:ss"
,把时间设置到date变量中
常用工具包
scoop
scoop,windows的包管理工具,类似homebrew, 安装时可能需要全局代理,如果报错网络连不上,后来连上代理时又告诉你装过了,就需要把scoop文件夹删掉。如何重装 Scoop?
posh-git
posh-git, git命令行提示工具。安装成功后,可以在$profile
中导入模块,这样每次打开都可以使用。可以只能提示,和把当前的分支在prompt中显示。
oh-my-posh
oh-my-posh,类似于oh-my-zsh,有很多的主题,可以自己切换。
posh-git和oh-my-zsh安装包之后,需要通过命令或者直接在$profile文件里添加Import-Module module-name
, 是因为控制台每次启动之后会加载WindowsPowerShell文件夹下的所有ps1文件。
安装
如果提示:
不受信任的存储库
你正在从不受信任的存储库安装模块。如果你信任该存储库,请通过运行 Set-PSRepository cmdlet 更改其 InstallationPolicy
值。是否确实要从“PSGallery”安装模块?
遇到这个,直接一路yes同意就好。
# 安装posh-git
Install-Module posh-git -Scope CurrentUser
# 把posh-git添加到$profile.CurrentUserAllHosts文件中
Add-PoshGitToProfile -AllHosts
# 安装oh-my-posh
Install-Module oh-my-posh -Scope CurrentUser
# 设置主题为Zash
Set-Theme zash
把安装命令添加到$profile
或者$profile.CurrentUserAllHosts
中,每次打开Terminal会加载WindowsPowerShell文件夹下的所有ps1文件并自动执行。
Import-Module posh-git
Install-Module oh-my-posh -Scope CurrentUser
# 设置主题为Zash
Set-Theme zash
Terminal窗口配置
在控制台点开设置,会打开一个配置文件。找到profiles,里面有不同程序的配置,找到powershell.exe的配置,也就是数组第一项,在里面添加自己的配置。我只在里面换了背景色,还有更多换背景图片什么可以自己查看。
{
...
// Put settings here that you want to apply to all profiles.
"background": "#013456",
"acrylicOpacity": 0.8,
"useAcrylic": true
}
Prompt
控制台左边的路径叫prompt。通过在$profile
文件中修改function prompt
,可以控制prompt的显示。之前看到文件夹太深导致路径显示很长,就想把显示路径截取到最后一段,在$profile中修改了一段。后来发现oh-my-posh里面直接给做好了,而且有更好看的主题,就没有再管它。真的是所有你想到的可以共用处理的需求,大多数都已经有人给你解决过了,并且比你实现的更好。
之前写的prompt代码:
function prompt {
$origLastExitCode = $LASTEXITCODE
$prompt = "$($ExecutionContext.SessionState.Path.CurrentLocation)"
$str = 'i-dream-projects'
# 替换别名
if ($prompt -match "front-end-projects") {
$prompt = $prompt.substring($prompt.indexOf("front-end-projects"))
} elseif ($prompt -match $str) {
$prompt = $prompt.substring($prompt.indexOf($str))
}
if ($status = Get-GitStatus -Force) {
$prompt += " [" + $status.Branch + "]"
}
$prompt += "$(if ($PsDebugContext) {' [DBG]:'} else {''})$('>' * ($nestedPromptLevel + 1)) "
$LASTEXITCODE = $origLastExitCode
$prompt
}
里面可以看到C#的字符串操作方法都可以使用。如substring、indexOf等。值得注意的是,powershell的运算符不太一样 > <
这些都不能用,需要替换。如: -eq(等于), -gt(大于) 等。具体可以看PowerShell比较运算符。
小技巧
如果自己的项目文件在一个很深的地方,每次打开不好进的话,可以在$profile文件中定义几个常用的路径变量,这样就可以直接进入了。如:
$front = 'D:\Projects\front-end-projects'
# 用的时候直接cd $front就可以
cd $front
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。