2019-02-04
Register-ArgumentCompleter
まだoutputが習慣化してなくて随分空いてしまった🤔
Register-ArgumentCompleter
PowerShell5から、従来のTabExpansion
に代わるRegister-ArgumentCompleter
なるモノが現れたのは、PowerShellerなら知っているだろう(わたしは去年まで知らんかったのでPowerShellerではないのだ)。
サンプル書いてみた
Mavenのよく使うコマンドでお試し。
Register-ArgumentCompleter -Native -CommandName mvn -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
echo -- clean install eclipse:eclipse |
Where-Object { $_ -like "$wordToComplete*" } |
Sort-Object |
ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
めちゃんこ簡単。
作ったもの
当時仕事で巨大なMavenプロジェクトを使っていて、コマンド打つのも億劫だったのでPowerShellで自動補完がほしいなと思っていたのだが、TabExpantion
はちょっと自分には使いこなせなかった。関数のオーバーライドをしたりのおまじないが必要だし。
Register-ArgumentCompleter
なら簡単に作れたので、APIが進化してる感をひしと感じたのであった。以下成果物↓
既知のバグ
PowerShell5だと-Native
オプションありの場合に-
を利用した補完ができないバグがあって、前述の自動補完がうまく使えなくて辛い...
PowerShell5.xでも使えないものかと試してみたところ、Trickyな回避策として`
で-
をエスケープしたらイケるというのを見つけたが...posh-gitもchocolateyもそれで従来からのTabExpantion
を使ってたのかーという気付きは得られた。
ちなみにわたしはPowerShell6を使ってるのでかんけーないのだ😜
残
Register-ArgumentCompleter
のScriptBlockの引数をちまちま調べたのがあるけど、長いから別に書こう。