Cara membuat penyelesaian tab PowerShell berfungsi seperti Bash

105

Katakanlah saya memiliki file berikut di direktori saya saat ini:

buildBar.bat
buildFoo.bat
buildHouse.bat

Dan saya mengetik berikut ini pada prompt perintah saya, ./budan kemudian TAB.

  • Di Bash, itu diperluas menjadi ./build

  • Di PowerShell, ini diperluas ke ./buildBar.bat- item pertama dalam daftar.

  • Di Cmd, perilakunya sama dengan PowerShell.

Saya lebih suka perilaku Bash - adakah cara untuk membuat PowerShell berperilaku seperti Bash?

RobSiklos
sumber
2
Anda dapat menggunakan Cygwin's bash;)
Blender
13
Ya - itulah yang telah saya lakukan selama sekitar satu dekade terakhir, tetapi saya mencoba untuk beralih ke PowerShell, karena saya ingin dapat terbang dengan baris perintah pada sistem selain milik saya, di mana Cygwin tidak terpasang.
RobSiklos

Jawaban:

175

Versi baru PowerShell menyertakan PSReadline, yang dapat digunakan untuk melakukan ini:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

Untuk membuatnya permanen, letakkan perintah ini di C: \ Users \ [User] \ Documents \ WindowsPowerShell \ profile.ps1.

svick.dll
sumber
26
MenuCompletealih-alih Completelebih seperti bash, ini memungkinkan Anda menggunakan tombol panah untuk memilih dari opsi yang tersedia
stib
1
@LeBleu Aneh, karena mesin Windows 10 saya yang baru hadir dengan PSReadline. Saya pikir modul itu dari Microsoft.
Franklin Yu
8
BTW, jika file profile.ps1 tidak ada di mesin Anda, Anda dapat membuatnya dengan perintahnew-item $profile -itemtype file -force
Reinis
2
Kemungkinan besar mesin Anda tidak akan memiliki. C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1.Anda benar-benar perlu menjalankannew-item $profile -itemtype file -force
RF
1
Itu ejaan yang sangat merepotkan untuk touch:-(
SamB
21

Sekarang dimungkinkan untuk membuat PowerShell melakukan penyelesaian gaya Bash, menggunakan PSReadline.

Lihat entri blog penyelesaian tab seperti Bash di PowerShell .

Jay Bazuzi
sumber
4
Tautan di posting blog rusak, namun pada akhirnya itu membawa Anda ke PsReadline (pengubahan terakhir pada tahun 2012) yang telah bercabang (komit terakhir pada tahun 2013)
GameScripting
6
Saat ini Anda dapat melakukan ini dengan satu baris, seperti yang dijelaskan di sini: stackoverflow.com/a/37715242/24874
Drew Noakes
15

Coba lihat di sini, bukan desiderata Anda:

PowerTab

tapi menurut saya adalah fitur ekspansi tab terbaik untuk konsol PowerShell !!!

CB.
sumber
Menarik. Jika ada cara untuk melakukan sesuatu seperti itu, maka tampaknya sangat mungkin untuk membuat ekspansi bekerja seperti di bash. Saya jauh dari ahli dalam PowerShell, jadi mungkin ada sesuatu yang hilang.
Andriy M
Tentu! Mulailah mempelajari kode Modul PowerTab untuk mencoba melakukan kebutuhan ekspansi Anda. Tetapi PowerTab menawarkan perluasan untuk hampir semua perintah, wmi, comobject, perakitan dengan cara pemilihan yang mudah!
CB.
7

tab hanya melengkapi nama perintah bukan argumen / parameter sebelumnya.

untuk juga melengkapi otomatis perintah lengkap dengan argumen dari riwayat, setel keybinding di bawah ini.

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

Sekarang, ketik beberapa karakter nama perintah dan gunakan panah atas / bawah untuk melengkapi otomatis perintah ini (dengan argumen) dari riwayat.

penghemat waktu nyata.

Gourav
sumber
5

Ubah fungsi TabExpansion untuk mencapai yang Anda inginkan. Ingatlah bahwa mungkin itu selesai sampai akhir jika Anda menekan tab lagi saran baru mengubah dari tempat Anda menekan tombol semula. Saya sangat menyukai perilaku yang sebenarnya, saya ingin garis ditulis secepat mungkin. Terakhir, jangan lupakan perluasan karakter pengganti, misalnya: bu * h [Tab] secara otomatis selesai ke buildHouse.bat

mjsr
sumber
Memodifikasi fungsi TabExpansion mungkin adalah cara yang harus dilakukan, masih jauh lebih rumit daripada yang saya cari. Saya pikir saya harus lebih fasih menggunakan PowerShell sebelum saya bisa mengacaukannya.
RobSiklos
1

Dengan Powershell Core kita dapat mengatur properti PredictionSource untuk PSReadLine sebagai History untuk mendapatkan saran otomatis. Lihat video YouTube untuk lebih jelasnya https://youtu.be/I0iIZe0dUNw

Nilesh Gule
sumber
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
徐志鹏
sumber