2012-09-05 4 views
13

Windows PowerShell 3.0でTabExpansion2関数をオーバーライドする方法を示す例がありますか?私は古いTabExpansion関数をオーバーライドする方法を知っていますが、PowerShell ISEでintellisenseの項目のリストを提供したいと思います。私はTabExpansion2の定義を見て、タブ拡張プロセスで自分のコードをどのように注入するのかは分かりませんでした。Windows PowerShell 3.0でTabExpansion2をオーバーライドする方法の例

答えて

12

この例では、あなたに良い出発点が与えられるはずです:Windows Powershell Cookbook: Sample implementation of TabExpansion2このコード例では、デフォルト呼び出しの前後にコードを追加して[CommandCompletion]::CompleteInputに追加できることを示しています。

たとえば、コマンド引数のカスタム補完を取得するために、CustomArgumentCompletersという名前のハッシュテーブルに$optionsハッシュテーブルのエントリを追加できます。エントリは、キーが引数名(例: "ComputerName"または "Get-ChildItem:Filter")であるハッシュテーブルであり、値はそのパラメータを完成させるために使用できる値の配列です。 Powertheshell.comにもこの記事に関する記事があります:Dynamic Argument Completion NativeArgumentCompletersオプションを使用して、ネイティブ実行可能ファイルのカスタム補完を指定することもできます(ここでも、キーはコマンド名であり、値は補完候補の配列です)。

CompleteInputが返された場合、結果をさらに分析するために$resultに保存することができます。結果はCommandCompletionクラスのインスタンスです。デフォルトの完了が任意の一致が見つからなかった場合は、マッチのリストに独自のCompletionResultエントリを追加することができます。

$result.CompletionMatches.Add(
    (New-Object Management.Automation.CompletionResult "my completion string")) 

は完成が実際に起こるので、関数から$resultを返すことを忘れないでください。

最後に、TabCompletion2を呼び出すコードは、すべてのコンソールベースの出力をスケルチしているようです(驚くことではありません)ので、デバッグメッセージを自分で書きたい場合は、別のテキストファイル。たとえば、あなたはこのように見えるTabCopmletion2End機能を変更することができます:ここで

$result = [System.Management.Automation.CommandCompletion]::CompleteInput(
    $inputScript, $cursorColumn, $options) 
$result | Get-Member | Add-Content "c:\TabCompletionLog.txt" 
$result 
+0

これは公式のどこに文書化されていますか?この情報はもともとどのように出ましたか? –

+1

悲しいことに、正式な文書は見たことがありませんが、もしあればそれを見たいと思っています。 – Charlie

8

は、オーバーライドされたTabExpansion2の一例である - TabExpansion2.ps1 とそのための完遂との練習プロファイルで使用されるいくつか:

興味のあるポイントをもたらすためMENT終了者:

  • TabExpansion2.ps1ローディングに最小限の作業を行います。補完が実際に起こると潜在的に高価な 初期化が1回実行されます。
  • オーバーライドTabExpansion2は、1つ以上の のプロファイル*ArgumentCompleters.ps1を経由して拡張メカニズムを提供します。最初の呼び出しで のプロファイルが一度呼び出され、TabExpansion2が呼び出されます。複数のプロファイルには、それぞれ独立したモジュール、ツールなどがあり、同時に使用することがあります。
  • 標準カスタム引数の完遂と ネイティブ引数の完遂に加えて、このカスタムTabExpansion2は内蔵の完了を傍受し、置き換えることができ、内蔵完了 と入力プロセッサからの結果を微調整 結果プロセッサをサポートしています。
  • 場合によっては、読み込み専用の空の組み込みの結果のまわりで動作します。
  • ArgumentCompleters.ps1 には、組み込みの タイプと名前空間の補完が代用され、より便利な に置き換えられています。なぜ、ヘルプタグ(など.Synopsis.DESCRIPTION、)とコメントアウトコードの完了:
  • 別のコンプリータは、コメントに完了したことを提供し?
関連する問題