PowerShellのタブ補完をBashのように機能させる方法


105

現在のディレクトリに次のファイルがあるとします。

buildBar.bat
buildFoo.bat
buildHouse.bat

そして、私は、コマンドプロンプトで次のように、入力し./buた後としますTAB

  • Bashでは、次のように拡張されます。 ./build

  • PowerShellでは./buildBar.bat、リストの最初の項目に展開されます。

  • Cmdでは、動作はPowerShellと同じです。

私はBashの動作を好みます。PowerShellをBashのように動作させる方法はありますか?


2
あなたは、Cygwinのを使用することができますbash;)
ブレンダー

12
はい-それは私が過去10年間ほどやってきたことですが、PowerShellに移行しようとしています。なぜなら、Cygwinがインストールされていない、自分以外のシステムのコマンドラインで飛行できるようにしたいからです。インストールされています。
RobSiklos、

回答:


174

PowerShellの新しいバージョンには、これを行うために使用できるPSReadlineが含まれています。

Set-PSReadlineKeyHandler -Key Tab -Function Complete

永続化するには、このコマンドをC:\ Users \ [User] \ Documents \ WindowsPowerShell \ profile.ps1に配置します。


25
MenuCompleteCompleteよりbashに似ているのではなく、矢印キーを使用して利用可能なオプションから選択できます
stib

1
@LeBleu私のブランドの新しいWindows 10マシンにはPSReadlineが付属していたので、それは奇妙です。モジュールはマイクロソフトからのものだと思った。
フランクリン・ユー

8
ところで、profile.ps1ファイルがマシンに存在しない場合は、コマンドでファイルを生成できますnew-item $profile -itemtype file -force
Reinis

2
お使いのマシンにはない可能性が非常に高いC:\Users\[User]\Documents\WindowsPowerShell\profile.ps1.です実際に実行する必要がありますnew-item $profile -itemtype file -force
RF

1
これは本当に不便なスペルですtouch:-(
SamB

21

PSReadlineを使用して、PowerShellでBashスタイルの補完を実行できるようになりました。

PowerShellのブログ投稿のBashのようなタブ補完を確認してください。


4
ブログ投稿内のリンクは、しかし、一日の終わりに、それはあなたをもたらし、壊れているPsReadline(前回2012年にコミット)されたフォーク(前回2013年にコミット)
GameScripting

6
最近では、ここで説明するように、ワンライナーでこれを行うことができます。stackoverflow.com/ a / 37715242/24874
Drew Noakes

15

実際にあなたのdesiderataではなく、ここを見てください:

PowerTab

しかし、PowerShellコンソールに最適なタブ拡張機能だと思います!!!


面白い。そのようなことをする方法があれば、bashのように拡張を機能させることはかなり可能だと思われます。私はPowerShellのエキスパートにはほど遠いので、何かが足りないかもしれません。
Andriy M

承知しました!PowerTabモジュールのコードの調査を開始して、拡張ニーズを実行してみてください。しかし、PowerTabは、ほとんどすべてのコマンド、wmi、comobject、アセンブリを簡単に選択できる方法で拡張できます。
CB。

7

tab 以前の引数/パラメータではなく、コマンド名のみを補完します。

履歴からの引数で完全なコマンドをオートコンプリートするには、以下のキーバインドを設定します。

Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

ここで、コマンド名の数文字を入力し、上/下矢印を使用して、履歴からこのコマンド(引数付き)をオートコンプリートします。

リアルタイムセーバー。


5

TabExpansion関数を変更して、必要な機能を実現します。もう一度タブを押すと、最後まで完了するので、最初にキーを押した場所から新しい提案が変更されることに注意してください。私は実際の振る舞いを強く好むので、できるだけ速く線を書く必要があります。最後に、ワイルドカードの拡張を忘れないでください。たとえば、bu * h [Tab]は自動的にbuildHouse.batまで完了します。


TabExpansion関数の変更はおそらく進むべき道ですが、私が探していたものよりもはるかに複雑です。私はそれをいじり回すことができる前に、powershellでもっと流暢になる必要があると思います。
RobSiklos


1
# keep or reset to powershell default
Set-PSReadlineKeyHandler -Key Shift+Tab -Function TabCompletePrevious

# define Ctrl+Tab like default Tab behavior
Set-PSReadlineKeyHandler -Key Ctrl+Tab -Function TabCompleteNext

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