直接看步骤的话,在最下方。

背景

Windows Terminal 虽然还处于预览阶段,但是也出来很长一段时间了。它的历史使命,也许就是让原生 Windows 也能有一个像样的命令行环境。以前我一直在用 Cmder,但是 Cmder 的启动速度确实不敢恭维,而 Windows Terminal 启动确实很快。相比 Cmder, Windows Terminal 还缺少很多功能,不过以后应该很快也会补上。

我想尝试使用 Windows Termimal 进行开发。Windows Terminal 默认可以使用 PowerShellcmdwsl bash作为脚本工具。既然是在 Windows 环境下嘛,还是得尊敬一下 Windows PoweShell 的。初次使用,我觉得 PowerShell 跟 Cmder 用起来,最不方便的一点就是,我在 Cmder 里面设了很多的 Alias,也就是通过修改 config/user_aliases.cmd 写一串 <alia>=<xxx> <xxx> 来实现的。

但是,PowerShell 如何实现命令的别名设置呢?

探索过程及原理概述

如果搜索关键词 windows powershell set user alias,通常谷歌会给出微软官方文档,但是这个文档只是告诉我们如何在脚本里面设置临时的别名,如果要设置永久别名,该怎么办?实际上,“别名”这种东西,也就是 alias,几乎所有的脚本语言,都没有所谓的“永久别名”(Permanent alias),我们使用 Linux bash 、Cmder 之类的脚本工具,打开终端时,系统会默认执行一个脚本文件( bash 是用户目录下的 .bashrc,Cmder 是 config/user_aliases.cmd ),而这样的脚本文件里,就包含了别名的定义。这也是为什么,我们在 Linux 类系统中,修改 .bashrc 后,必须要重新登出登录、或者 source .bashrc 的原因了。

所以,我们只要修改 Windows Powershell 启动时执行的文件就行了。很多论坛里面说,默认执行的脚本是 $Home\Documents\profile.ps1 ,也就是 C:\Users\你的用户名\Documents\profile.ps1 ,但是这并不正确,最好的方式是,先启动 PowerShell ,再执行 echo $profile,这样得到的文件路径,才是 PowerShell 的默认执行文件路径。

然后,创建这个文件就好啦。

在文件里面,写上别名设置的语句。再一次注意,假如你的别名指代的命令含有空格,就不可以使用 New-Alias 命令,因为它不能带空格,即使你把指代的命令用引号括起来也没用。那怎么办呢?继续谷歌,原来,正确姿势是用 function ,也就是,我们把自己要定义的指令,定义为一个函数,就行啦。

保存文件,重新启动 PowerShell 以后,不出意外,应该会报一个 File xxxxxxx\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system. 根据此链接,出现这种情况,是因为 Windows 系统为了防止恶意脚本自动执行,故默认不允许自动运行脚本。所以,在确定自己有能力把控的情况下,以管理员身份,在 PowerShell 中执行 Set-ExecutionPolicy RemoteSigned,即可。

再次重启 PowerShell,应该可以发现,自定义别名已经生效了。

步骤整理

如果你想为自己的 Windows PowerShell 设置永久的命令别名 (Alias),可以遵循以下步骤:

  1. 打开 PowerShell ,运行 echo $profile,会输出一个文件路径。创建这个文件。

  2. 打开刚创建的文件,按以下格式设置多条别名:

    1
    function 别名 { 需要替代的命令,可以包含空格 }
  3. 以管理员身份打开 PowerShell,执行 Set-ExecutionPolicy RemoteSigned

  4. 重新启动 PowerShell ,应该已经完成了。