web-dev-qa-db-ja.com

Powershellのオートコンプリートをbashのように機能させることは可能ですか?

私はPowershellが大好きですが、Linuxのバックグラウンドから来て、本当に私を悩ませていることがいくつかあります。たとえば、デフォルトの自動補完がどのように機能するかなどです。

例:Get-PSは、最初に一致するコマンドである "Get-PSBreakpoint"に展開されます。 bashでは、一致するコマンドが1つしかない場合、bashは一致するコマンドに展開されます。一度に何もしないタブが複数ある場合、タブをダブルタップすると、一致するコマンドのリストが表示されますが、展開されません。 Powershellをこのように動作させる方法はありますか?

そして、もう1つ、1行書き込んだら、マーカーを前のコマンドに戻します(マーカーは^の場所です)。

"Get-PSS ^ | Remove-PSSession"は "Get-PSSession ^"に自動補完され、後続のコマンドがすべて削除されます。 bashでは、後続のコマンドは影響を受けません。自動補完時にPowershellが末尾のコマンドを削除しないようにする方法はありますか?

ボーナスは画面をクリアするためにCTRL + Lを取得することです。 CTRL + Aで行頭に移動し、CTRL + Eで行末に移動します。

19
Peter Moberg

チェックアウト PSReadline

記事から:

このモジュールは、PowerShell.exeのコマンドライン編集エクスペリエンスを置き換えます。それは提供します:

  • 構文の色分け
  • 単純な構文エラー通知
  • 優れたマルチラインエクスペリエンス(編集と履歴の両方)
  • カスタマイズ可能なキー割り当て
  • Cmdおよびemacsモード(どちらもまだ完全には実装されていませんが、両方とも使用可能です)
  • 多くの構成オプション
  • Bashスタイルの補完(Cmdモードではオプション、Emacsモードではデフォルト)
  • Bash/zshスタイルのインタラクティブな履歴検索(CTRL-R)
  • Emacsヤンク/キルリング
  • PowerShellトークンベースの「Word」の動きとキル
  • 元に戻す/やり直す
  • ライブセッション間での履歴の共有を含む、履歴の自動保存
  • Ctrl + Spaceによる「メニュー」補完(Intellisenseのように、矢印で補完を選択)

毎日使っています!

13
David Mohundro

たぶん、カスタマイズ可能なPowerShellタブ拡張である Powertab をご覧ください。

3
harrymc

PowerShellは、由緒あるコマンドプロンプトと同じコンソール機能を使用します。通常のホーム/エンドがあり、次のようになります。

  • F3 前のコマンドを呼び出す
  • F1 前のコマンドから単一の文字をコピーするには
  • F7 ポップアップ履歴ウィンドウ

...しかし、私が知る限り、可能なすべての完了を表示する機能はありません。

2
njd

ピーターこんにちはF8を押してスピードサーチのようなものを。これは、行にあるものから始まる、以前に実行したコマンドで完了します。末尾の削除に関する問題は厄介です。同じ問題についてConnectに提案を書いています。メインタイムでは、Powershell ISEを使用できますが、動作が少し良くなります(末尾の文字を削除しないでください)。

2
mjsr

古いcommand.exeサブシステムはまだPowerShellに関与しており、多くの不快な動作を強いています。しかし、PowerShell v3の時点で、GUI(PowerShell ISE)が使用できるようになり、より近代的な完成体験+色付けが含まれています。

enter image description here

2
Jay Bazuzi

通常のPowerShellは、コマンドプロンプトウィンドウとしてcmdを使用します。そのため、下位互換性のために変更できない大きな遺産(プログラムは古いcmdの動作を中継する)を持っています。

Powershellの代わりにpowershell_iseを使用することをお勧めします(標準のPowerShellバンドルに含まれています)。バージョン3.0(以前については不明)は、箱からIntellisenseをサポートします。これはbash補完スタイルに非常に近いものです。タブの代わりにCtrl + Spaceを押すだけです。 PowerTabのカスタム補完で問題が発生しましたが、Intellisenseはそれでうまく動作します。 Powershell_iseは、末尾のコマンドも保持し、通常の選択モードを備え、Ctrl + C、Ctrl + V、Ctrl + Aで入力されたコマンドの選択をサポートするため、Ctrl + A、行の先頭、Ctrl + Aにジャンプします(またはHome /終わり)。

1
xvorsx

PowerShellは独自のパーサーをコマンドに使用するため、同じターミナル(guiウィンドウ)を共有していても、ある意味でcmd.exeとは異なるシェルです。

その違いのため、PowerShellでは、独自の関数でタブ補完機能をオーバーライドできます。私はこれをいじくる時間はありませんでしたが、基本的にはtabexpansion関数をオーバーライドできるのと同じ方法で、プロファイルの関数Promptをオーバーライドします。

私は この記事 を見つけました Lee Holmes によって(素晴らしいWindows PowerShellクックブックの著者)は、探しているものと非常によく似たtabexpansionオーバーライドを記述しています。あなたはおそらくそれを微調整してあなたが望むものを正確に与えることができます。

0