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


19

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

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

そしてもう1つ、私が1行書いた場合、マーカーを以前のコマンドに戻します(マーカーは^があるところです):

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

ボーナスは、Ctrlキーを押しながらLキーを押して画面をクリアすることです。行の先頭に移動するにはCtrl + A、行の末尾に移動するにはCtrl +E。


:)私はあなたの質問への答えを掲示したが面白いことは、私は正反対のを探していますので、私はこの質問に到着したということです...私はbashでPowerShellのスタイルの完成を望む
ロバート・S Ciaccioは

PowerShellスタイルの補完はbashで利用可能です-機能メニューの完成を探してください
ジェイソンシャーク

幸いなことに、Windows 10にはbashがあります。
-byxor

回答:


11

PSReadlineをご覧ください。

記事から:

このモジュールは、PowerShell.exeのコマンドライン編集エクスペリエンスに代わるものです。以下を提供します。

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

毎日使っています!


4
PSReadLineをインストールしたら、これをプロファイルに追加してbashスタイルのタブ補完を有効にする必要がありますSet-PSReadlineKeyHandler -Key Tab -Function Complete
。– brianpeiris

3
PSReadLineがWindows 10にデフォルトでインストールされるようになりました。@ brianpeirisが言及した設定行をプロファイルに追加するだけで準備完了です。
ドンクルックシャンク

使用してみてくださいCompleteMenu代わりに、Completeより多くのbashのような経験のために、それはあなたが選択肢をナビゲートするには、矢印キーを使用することができます
STIB


2

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


2

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

ここに画像の説明を入力してください


2

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

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

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


これは、古き良きbashと比較してまだ非常に制限されています。たとえば、bashでctrl + r(speedsearch)を入力して、入力を開始すると、一致する前のコマンドが表示されます。
ピーターモーバーグ

1

通常のpowershellは、cmdをコマンドプロンプトウィンドウとして使用します。そのため、下位互換性のために変更できない巨大なレガシー(プログラムは古いcmdの動作を長い間中継します)があります。

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


0

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.