dotnet-CLI透過TAB自動完成

最近打算開始學習 .NET 6,自然就要先做一些準備工作,第一步就是 CLI 的 AutoComplete 功能

一直以來習慣的指令列工具都是微軟內建的 CMD.exe,可能是因為他跟 MS-DOS 6.0 很像,從以前就用到現在了所以就一直沒改,後來也都是用類似Cmder這樣的工具,但骨子還是沒變。

不過因為powerShell真的很強大,也應該是時候換一下工具了,最主要的是,他能夠透過設定的方式達到我們需要的自動完成功能,其實官方文件就已經說明了這件事情,並且介紹了支援的幾個 shell

有興趣的可以前往觀看如何啟用 .NET CLI 的 TAB 鍵自動完成

PowerShell 設定

1
2
3
4
5
6
7
# PowerShell parameter completion shim for the dotnet CLI
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock {
param($commandName, $wordToComplete, $cursorPosition)
dotnet complete --position $cursorPosition "$wordToComplete" | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}

重點就是上面的程式碼而已,雖然我不會寫powerShell但也能看得懂邏輯,大概就是註冊一個自動完成的事件給dotnet指令,然後接受參數,並透過設定的dotnet complete --position指令去循環,大概的原理是這樣,能夠做到這件事情應該也是依靠dotnet complete

那麼理解了之後,自然也就要知道這份設定檔如何設定,在官網範例程式碼旁邊可以看到

請參閱如何和設定檔與執行原則。

建立 powerShell 設定檔

第一步當然就是先去看一下建立設定檔

1
2
3
if (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}

看起來應該也很容易理解語意,如果路徑檔案名稱不存在的話,就強制建立一個檔案:$PROFILE,這應該也是一個特殊保留字,用來表示設定檔的吧

1
notepad $PROFILE

接著再透過 notepad 開啟該檔案,並且將我們之前自動完成的程式碼貼上去儲存就可以了

設定檔和執行原則

如果開啟powerShell之後發現紅色的警告說是不能執行程式的話,那麼這個關於執行原則可能就要先了解一下

建議是全部先看過一次,然後挑選適合的設定值進行設定,以我的情況在本機自己練習開發,所以我直接設定

1
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -scope CurrentUser

VSCode 設定預設 shell

開啟Terminal之後這個地方可以設定預設值

或是直接按下F1輸入關鍵字,也能夠查到指令

然後就會列出各種 shell,在這邊就可以指定預設的 shell 了

結尾

經過上面的設定後,開啟 powerShell 也不再出現錯誤提示,並且在我輸入 dotnet a的時候,他也會自動幫我改為dotnet add,但不知道是不是因為我電腦比較慢的關係,反應時間有點久,不過起碼是正確動作了