PowerShell sekmesi tamamlamanın Bash gibi çalışmasını sağlama


105

Diyelim ki mevcut dizinimde aşağıdaki dosyalar var:

buildBar.bat
buildFoo.bat
buildHouse.bat

Ve komut istemime şunu yazıyorum ./buve sonra TAB.

  • Bash'de şu şekilde genişletilir: ./build

  • PowerShell'de, ./buildBar.batlistedeki ilk öğe olarak genişletilir .

  • Cmd'de davranış PowerShell ile aynıdır.

Bash davranışını tercih ederim - PowerShell'in Bash gibi davranmasını sağlamanın bir yolu var mı?


2
Cygwin'i kullanabilirsiniz bash;)
Blender

13
Evet - son on yıldır yaptığım şey bu, ancak PowerShell'e geçmeye çalışıyorum çünkü Cygwin'in olmadığı kendi sistemim dışındaki sistemlerde komut satırında uçabilmek istiyorum. Kurulmuş.
RobSiklos

Yanıtlar:


175

PowerShell'in yeni sürümleri, bunu yapmak için kullanılabilecek PSReadline'ı içerir:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

Kalıcı hale getirmek için bu komutu C: \ Kullanıcılar \ [Kullanıcı] \ Belgeler \ WindowsPowerShell \ profile.ps1 içine koyun.


26
MenuCompleteCompletedaha çok bash gibi olmak yerine , mevcut seçenekler arasından seçim yapmak için ok tuşlarını kullanmanıza izin verir
stib

1
@LeBleu Bu garip, çünkü yepyeni Windows 10 makinem PSReadline ile geldi. Modülün Microsoft'tan olduğunu sanıyordum.
Franklin Yu

8
BTW, makinenizde profile.ps1 dosyası yoksa, bir komutla bir tane oluşturabilirsiniznew-item $profile -itemtype file -force
Reinis

2
Makinenizin C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1.gerçekten çalıştırmanız gerekmeyeceği muhtemeldirnew-item $profile -itemtype file -force
RF

1
Bu, aşağıdakiler için gerçekten uygunsuz bir touch
yazımdır

21

PSReadline kullanarak PowerShell'in Bash tarzı tamamlama yapması artık mümkün.

PowerShell'deki Bash benzeri sekme tamamlama blog gönderisine göz atın .


4
Blogpost bağlantı ancak getiren günün sonunda, bozuldu PsReadline (son 2012 yılında taahhüt) olmuştur çatallı (son 2013 yılında taahhüt)
GameScripting

6
Bugünlerde bunu, burada açıklandığı gibi tek satırlık bir malzeme ile yapabilirsiniz: stackoverflow.com/a/37715242/24874
Drew Noakes

15

İstediğiniz veriye değil, buraya bir bakın:

PowerTab

ancak PowerShell konsolu için en iyi sekme genişletme özelliği olduğunu düşünüyorum !!!


İlginç. Böyle bir şey yapmanın bir yolu varsa, genişlemenin bash'daki gibi çalışmasını sağlamak oldukça mümkün görünüyor. Yine de PowerShell'de uzman olmaktan çok uzağım, bu yüzden bir şeyler eksik olabilir.
Andriy M

Elbette! Genişletme ihtiyaçlarınızı karşılamayı denemek için PowerTab Modülünün kodunu incelemeye başlayın. Ancak PowerTab, kolay bir seçim yöntemiyle hemen hemen her komut, wmi, comobject, montaj için genişletmeler sunar!
CB.

7

tab yalnızca komut adını tamamlar, önceki bağımsız değişkenlerini / parametrelerini değil.

ayrıca tam komutu geçmişten gelen argümanlarla otomatik olarak tamamlamak için aşağıdaki tuş bağlamayı ayarlayın.

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

Şimdi, birkaç karakter komut adı yazın ve bu komutu geçmişten (argümanlarla) otomatik olarak tamamlamak için yukarı / aşağı oku kullanın.

gerçek zaman tasarrufu.


5

İstediğinizi elde etmek için TabExpansion işlevini değiştirin. Unutmayın, sekmeye tekrar basarsanız, yeni öneri, başlangıçta tuşa bastığınız yerden değiştirir. Gerçek davranışı şiddetle tercih ediyorum, satırın olabildiğince hızlı yazılmasını istiyorum. Son olarak joker karakter genişletmeyi unutmayın, örneğin: bu * h [Tab], buildHouse.bat'ı otomatik olarak tamamlar.


TabExpansion işlevini değiştirmek muhtemelen gidecek yoldur, yine de aradığımdan çok daha karmaşık. Sanırım bununla uğraşmadan önce powershell'de daha akıcı olmam gerekecek.
RobSiklos

1

Powershell Core ile, otomatik öneri almak için PSReadLine için PredictionSource özelliğini Geçmiş olarak ayarlayabiliriz . Daha fazla ayrıntı için YouTube videosuna bakın https://youtu.be/I0iIZe0dUNw


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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.