PowerShellのtab補完の挙動を変更する
PowerShell使うと毎回気になるのがTabで補完すると
1PS > .\hoge.txt
先頭に「.\」が自動で付与される挙動が微妙に気になっていたので,手を入れてみました.
環境
- Windows 10 Home Edition
- PowerShell
1PS > $PSVersionTable
2
3Name Value
4---- -----
5PSVersion 5.1.17134.407
6PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
7BuildVersion 10.0.17134.407
8CLRVersion 4.0.30319.42000
9WSManStackVersion 3.0
10PSRemotingProtocolVersion 2.3
11SerializationVersion 1.1.0.1
Tabに割り当てられているFunctionを探す
tabという名称の付いたFunctionを探します.
1PS > ls function:*tab*
2CommandType Name Version Source
3----------- ---- ------- ------
4Function TabExpansion2
ソースコードの取得と書き出し
これのソースコードを取得します.
1PS > (Get-Command 'TabExpansion2').ScriptBlock
2もしくは
3PS > $function:tabexpansion2
で標準出力で確認出来るのでこれを適当なところにリダイレクトします.
1PS > $function:tabexpansion2 > /path/to/tab.ps1
あとはこれをISEなどで自分好みに加工します.
最後に任意のprofile.ps1に先程の関数名で作成したものを上書き定義して終わりです.
1Function TabExpansion2 {
2 ...
3}
実行時の問題
PowerShellはデフォルトだと同じ階層にあるプログラムを実行する際は
1PS > .\hoge.exe
のようにする必要がありますが,Pathに「.」を追加することで「.\」がなくとも実行可能になります.
1PS > $env:path ="$($env:path);."
追記:検索し過ぎて混乱してこれも入れてましたが,よく考えたらbashもこの挙動なのでこれに関しては要らないですね.
成果物
こんな感じになったのでユーザーディレクトリ/Document/WindowsPowerShell/profile.ps1として置いておけば当該ユーザーのデフォルトプロファイルとして利用できます.