PowerShell 完美化的微小调整

使用这些技巧自定义 PowerShell,使其更加高效。
258 位读者喜欢这篇文章。
open source button on keyboard

Opensource.com

我爱上了 PowerShell。它是脚本编写(power)中的功能丰富性和可读性以及命令行(shell)中的简洁性的完美结合。但是,关于 PowerShell 跨平台开源的优点的长篇大论最好留给另一篇文章(我已经写过一篇,如果你希望你的人生有意义,你必须阅读)。

一旦你接受 PowerShell 进入你的内心并安装到你的笔记本电脑上,本文中的技巧可以帮助你按照自己喜欢的方式调整 PowerShell,从而获得数小时的 PowerShell 乐趣。

配置启动设置

Bash 用户会熟悉 .bashrc.bash_profile 文件,其中包含每次 shell 实例启动时运行的命令。PowerShell 也有一个类似的文件,尽管它的位置是系统特定的。该文件的完整路径在 PowerShell 的 $profile 变量中可用。如果你希望使用下面描述的任何或所有调整,只需将它们放入此文件中即可。

叮咚,提示音已死

如果你在 Windows 上运行 PowerShell(别担心,我们不会评判你),你可能会遇到一个小的听觉滋扰:如果你在空提示符下按退格键,你可能会听到烦人的铃声。你可以使用以下命令将其关闭

Set-PSReadlineOption -BellStyle None

在 Windows 上使用制表符

Tab 补全是 PowerShell 最令人惊叹的功能之一。当你在 Linux 或 MacOS 上键入 cmdlet 或参数的一部分,然后按 Tab 键时,PowerShell 将显示你键入的 cmdlet 或参数的所有可能的补全。你甚至可以只键入 cmdlet 的名称,后跟一个连字符,然后按 Tab 键快速查看所有参数

PS /home/yevster/Documents/ArticlesInProgress> Get-Command -                    
Name                  ArgumentList          InformationAction                   
Verb                  All                   ErrorVariable                       
Noun                  ListImported          WarningVariable                     
Module                ParameterName         InformationVariable                 
FullyQualifiedModule  ParameterType         OutVariable                         
CommandType           Verbose               OutBuffer                           
TotalCount            Debug                 PipelineVariable                    
Syntax                ErrorAction                                               
ShowCommandInfo       WarningAction     

不幸的是,Windows 上的默认行为是不同的。当你在 Windows 上键入 cmdlet 或参数的一部分时,PowerShell 将仅提供第一个可用的补全。然后你可以再次(又一次又一次)按 Tab 键来循环浏览其他补全。真糟糕!

幸运的是,修复这种令人厌恶的行为比描述它花费的时间要少得多。只需将此行添加到你的 $profile

Set-PSReadlineOption -EditMode Emacs

白底黑字的灾难

如果你已将终端配置为在白色背景上使用黑色文本,则在使用 PowerShell 时可能会遇到丑陋的情况

powershell white on white

尽管 PowerShell 继承了父终端的背景色和前景色,但它独立地为命令行上的特定标记着色。例如,默认情况下,对象成员和数字被着色为白色,这使得它们在白色背景上难以看清。

幸运的是,通过将这个小技巧放入你的 $profile 中,可以轻松解决此问题

$colorScheme = @{
    None      = "Black";
    Comment   = "DarkMagenta";
    Keyword   = "DarkGreen"; 
    String    = "DarkBlue";
    Operator  = "DarkRed";
    Variable  = "DarkGreen";
    Command   = "DarkRed";
    Parameter = "DarkGreen";
    Type      = "DarkGray";
    Number    = "DarkGray";
    Member    = "DarkGray";
}

$colorScheme.Keys | % { Set-PSReadlineOption -TokenKind $_ -ForegroundColor $colorScheme[$_] }

随意调整上面 $colorScheme 映射以符合你的喜好(好像你需要我的许可一样)。你可以通过键入 [ConsoleColor].GetEnumNames() 来查看所有可用的颜色选项。

使其提示

你可以自定义 PowerShell 提示符以显示你想要的任何内容:时间、你的用户名、关于你同事的侮辱。要自定义提示符,你只需定义一个名为 prompt 的函数。此函数返回的字符串将成为你的 PowerShell 提示符。

这是我的提示符通常的样子

07:10PM /home/yevster>

我说“通常”是因为我添加了一个漂亮的小调整:当命令(或 cmdlet)以错误状态退出时,我已经设置 PowerShell 来告诉我

powershell error

当标准错误写入的消息被可悲地抑制时,如上面的示例所示,查看返回状态可能很有帮助。

这是我在我的 $profile 中配置 PowerShell 提示符的方式(你也可以这样做)

function prompt {
	$lastResult = Invoke-Expression '$?'
	if (!$lastResult) {
		Write-Host "Last command exited with error status." -ForegroundColor Red
	}
	Write-Output "${msg}$(
		# Show time as 12:05PM
		Get-Date -UFormat "%I:%M%p"
		# Show current directory
	) $(Get-Location)> "  
}

关键在于组合键

PowerShell 提供了大量方法来最大限度地减少键入。Tab 补全就是其中一种。别名是另一种。这里还有一种:你可以配置 PowerShell 以响应你选择的组合键(chord)来执行特定的脚本块。

让我们想象一下,我是一个社交媒体成瘾者,并且希望轻松地强迫性地查看 Facebook。我会将此行添加到我的 $profile

Set-PSReadlineKeyHandler -Chord Ctrl+F -ScriptBlock { google-chrome https://# } 

你需要确保你指定的组合键尚未被你的终端应用程序使用。如果是,则组合键可能不会传递到 PowerShell。

这是组合键绑定功能的一个更有效率的用途:使用一个快速的组合键将更改提交到 Git 并将它们推送到远程仓库 origin

Set-PSReadlineKeyHandler -Chord Ctrl+G -ScriptBlock {
	$message = Read-Host "Please enter a commit message"
	/usr/bin/git commit -m "$message" | Write-Host
	$branch = (/usr/bin/git rev-parse --abbrev-ref HEAD)
	Write-Host "Pushing ${branch} to remote"
	/usr/bin/git push origin $branch | Write-Host
}

注意: 通过组合键启动的任何命令的标准输出都不会显示在终端中。如果你确实想在终端中查看命令的输出,请将其管道传输到 Write-Host CMDlet,就像我在上面的示例中所做的那样。

一切顺利皆大欢喜

既然你已经勇敢地忍受了我糟糕的双关语走到了这一步,我希望你在此过程中使你的 PowerShell 更加愉快地使用。如果你有任何我遗漏的喜欢的技巧,我很乐意看到它们。请评论和/或 在 Twitter 上给我发推文

PowerShelling 快乐!

标签
User profile image.
软件工程师,具有开源治理倾向。偶尔的开发者推广者。所有意见均为我个人观点。此处为脑力激荡。

9 条评论

PowerShell 是开源的吗?

感谢这篇文章。:)

很高兴知道你终于可以在 Windows 中拥有一个像样的 shell 了。当我在 VM 上安装 Win10 时,它已经存在了,我不需要去寻找它。

谢谢 - 如果你能详细说明创建 $profile 的最佳方法并“修复”它以便它在登录时运行,那将很有用。

很棒的文章。我几次需要使用 PS 都很
令人沮丧,而这篇文章涵盖了我的大部分挫败感。

我很惊讶你没有提到内置的 IDE,powershell_ise。
我绝对更喜欢这个而不是记事本,ps1 文件的默认程序。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe

目前我将坚持在 Windows 10 上通过 WSL 使用 Ubuntu 中的 bash,但感谢你的宣传。我会记住的。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.