为Powershell启用更舒服的自动补全

为什么要写这个呢?

主要吧,现在在Windows上,不管有什么多种多样的shell移植如Msys,Cygwin之类,用得最多最方便的,特别是和我目前主要使用的两个IDE/编辑器: Visual Studio与Visual Studio Code最相合的,肯定是Powershell。

但是,默认的Powershell自动补全非常难用,可以自动补全的参数就寥寥几个。我觉得还是可以稍微改进一下。

方法

首先需要安装好PSReadLine模块。

安装好后,使用你最喜欢的编辑器,编辑$PROFILE这个变量对应的文件。这里我们以使用Windows自带的记事本notepad为例,在Powershell中输入:

1
notepad $PROFILE

添加如下片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Import-Module PSReadLine

# Shows navigable menu of all options when hitting Tab
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete

# Autocompleteion for Arrow keys
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

Set-PSReadLineOption -ShowToolTips
Set-PSReadLineOption -PredictionSource History

#Set the color for Prediction (auto-suggestion)
Set-PSReadLineOption -Colors @{
Command = 'Magenta'
Number = 'DarkBlue'
Member = 'DarkBlue'
Operator = 'DarkBlue'
Type = 'DarkBlue'
Variable = 'DarkGreen'
Parameter = 'DarkGreen'
ContinuationPrompt = 'DarkBlue'
Default = 'DarkBlue'
InlinePrediction = 'DarkGray'
}

oh-my-posh --init --shell pwsh --config ~/jandedobbeleer.omp.json | Invoke-Expression

每句配置的含义都非常容易懂。颜色部分是我自己定义的,都可以自由改动。此外我还使用了oh-my-posh定义shell的样式。改动结束后,保存文件,重新打开Powershell即可应用配置。或者使用. $PROFILE以在当前终端读取配置文件。