之前一直用mac比较多,用过oh-my-zsh的主题,里面对git的提示,还有路径的展示都挺好看。现在换了windows terminal之后一下子觉得挺不习惯,对PowerShell的命令也不太清楚,在这里捋一下常用的命令以及环境配置。(terminal在win10 新系统中直接可以在Store中下载安装)

PowerShell的介绍以及常用命令可以在这篇 Powershell介绍以及常用命令文章中了解

配置完的效果

image

常用变量
用户配置
  • $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
参考

浮生如斯
20 声望2 粉丝

缘来天注定,缘去人自夺。种如是因,收如是果,一切唯心造。笑言面对,不去埋怨。悠然、随心、随性、随缘。


引用和评论

0 条评论