Powershell'de otomatik tamamlamanın bash'da olduğu gibi çalışması mümkün müdür?


19

Powershell'i seviyorum, ancak bir Linux geçmişinden geldiğimde, beni gerçekten rahatsız eden birkaç şey var. Örneğin, varsayılan otomatik tamamlamanın nasıl çalıştığı gibi.

Örneğin: Get-PS, ilk eşleşen komut olan "Get-PSBreakpoint" e genişler. Bash içinde bash ile eşleşen yalnızca bir komut varsa eşleşen komuta genişletilir. Bir kez birkaç vurma sekmesi varsa hiçbir şey yapmazsa, çift dokunma sekmesi eşleşen komutların listesini gösterir, ancak genişlemez. Powershell'in böyle davranmasını sağlamanın bir yolu var mı?

Ve başka bir şey, eğer bir satır yazdıysanız ve işaretleyiciyi önceki bir komuta geri taşırsa (işaretçi ^ olduğu yerdir):

"Get-PSS ^ | Remove-PSSession" otomatik olarak "Get-PSSession ^" ile tamamlanır ve tüm sondaki komutlar kaldırılır. Bash'da sondaki komutlar hala etkilenmezdi. Otomatik tamamlama sırasında Powershell'in sondaki komutları kaldırmamasının bir yolu var mı?

Bir bonus, ekranı temizlemek için CTRL + L elde etmek olacaktır. Satırın başına gitmek için CTRL + A ve satırın sonuna gitmek için CTRL + E.


Sorunuza bir cevap gönderdim ama komik olan şey bu soruya geldiğim için tam tersini arıyorum ...
Bash'da

PowerShell stilini tamamlama bash'ta kullanılabilir - menü menüsünü
tamamla'yı

Neyse ki şimdi windows 10 üzerinde bash var.
byxor

Yanıtlar:


12

PSReadline'a göz atın .

Makaleden:

Bu modül, PowerShell.exe'deki komut satırı düzenleme deneyiminin yerini alır. Şunları sağlar:

  • Sözdizimi renklendirme
  • Basit sözdizimi hatası bildirimi
  • İyi bir çok satırlı deneyim (hem düzenleme hem de geçmiş)
  • Özelleştirilebilir anahtar bağlantıları
  • Cmd ve emacs modları (ikisi de henüz tam olarak uygulanmadı, ancak her ikisi de kullanılabilir)
  • Birçok yapılandırma seçeneği
  • Bash stili tamamlama (Cmd modunda isteğe bağlı, Emacs modunda varsayılan)
  • Bash / zsh stili etkileşimli geçmiş arama (CTRL-R)
  • Emacs yank / kill ring
  • PowerShell jeton tabanlı "kelime" hareketi ve öldürme
  • Geri Al / yeniden yapma işlemi
  • Geçmişi canlı oturumlarda paylaşmak da dahil olmak üzere otomatik olarak tarih tasarrufu
  • Ctrl + Space ile "Menü" tamamlama (biraz Intellisense, oklarla tamamlamayı seçin)

Her gün kullanıyorum!


4
PSReadLine'i yükledikten sonra, bunu profilinize ekleyerek bash stili sekme tamamlamayı etkinleştirmeniz gerekir:Set-PSReadlineKeyHandler -Key Tab -Function Complete
brianpeiris

3
PSReadLine artık varsayılan olarak Windows 10'a yüklenmiştir . @Brianpeiris'in bahsettiği yapılandırma hattını profilinize koymanız yeterlidir.
Don Cruickshank

Daha bash benzeri bir deneyim CompleteMenuyerine kullanmayı deneyin Complete, seçeneklerde gezinmek için ok tuşlarını kullanmanızı sağlar
stib

3

Belki de özelleştirilebilir bir PowerShell Sekmesi genişletmesi olan Powertab'a bakmalısınız .


2
Teşekkürler! Powertab sekmeyi genişletmeyi gerçekten daha iyi hale getirir. Yine de, komutun sonunda olmayan bir şeyi tamamlama sorunu var.
Peter Moberg

2

merhaba peter sadece hızlı arama gibi bir şey için F8 tuşuna basın . Daha önce çalıştırdığınız ve satırda bulunan komutlarla başlayan komutlarla tamamlanır. Sondaki silme işlemiyle ilgili sorun can sıkıcı, Connect'te aynı konuyla ilgili bir öneri yazıyorum. Ana zamanda, biraz daha iyi davranan Powershell ISE'yi kullanabilirsiniz (sondaki karakterleri silmeyin).


2

Eski command.exe alt sistemi hala PowerShell ile ilişkilidir ve pek çok hoş olmayan davranışı zorlar. Ancak PowerShell v3'ten itibaren GUI (PowerShell ISE) artık kullanılabilir ve çok daha modern bir tamamlama deneyimi + renklendirme içeriyor.

resim açıklamasını buraya girin


2

PowerShell, saygıdeğer Komut İstemi ile aynı konsol özelliklerini kullanır; böylece her zamanki Ana Sayfa / Sona sahipsiniz ve:

  • F3 önceki komutu getirmek
  • F1 önceki komuttan tek bir karakter kopyalamak için
  • F7 açılır pencere geçmişi

... ama bildiğim kadarıyla tüm tamamlamaları gösterecek bir tesis yok.


Bu iyi eski bash ile karşılaştırıldığında hala çok sınırlayıcı. Örneğin, bash'de ctrl + r (hızlı arama) yazabilmek ve yazmaya başlamanız gerçekten harika ve eşleşen bir önceki komut görünecek.
Peter Moberg

1

Düzenli powershell komut istemi penceresi olarak cmd kullanır. Bu nedenle, geriye doğru karşılaştırılabilirlik nedeniyle değiştirilemeyen büyük bir mirasa (programlar, yaşlı cmd'nin davranışına geçiyor).

Powershell yerine powershell_ise kullanmanızı öneririm (standart powershell paketinde bulunur). Sürüm 3.0 (önceki sürümden emin değilsiniz) Intellisense'i kutudan destekler. Bu, bash tamamlama stiline çok yakın. Sadece isabet Ctrl + Space yerine Tab. PowerTab'da özel tamamlamalarla ilgili sorunlar yaşıyorum, ancak Intellisense bununla iyi çalışıyor. Powershell_ise ayrıca sondaki komutları korur, normal seçim moduna sahiptir, girilen komutu seçmek için Ctrl + C, Ctrl + V, Ctrl + A'yı destekler, böylece Ctrl + A, satırın dilenmesine atla, Ctrl + A, sonuna kadar (veya Ana Sayfa /Son).


0

PowerShell komutlar için kendi ayrıştırıcısını kullanır, bu nedenle aynı terminali (gui penceresi) paylaşsalar da bir anlamda cmd.exe'den farklı bir kabuktur.

Bu fark nedeniyle, PowerShell sekme tamamlama işlevini kendi işlevinizle geçersiz kılmanıza olanak tanır. Bunu kendimle uğraşmak için zamanım olmadı, ancak temel olarak tabexpansionprofilinizdeki işlevi geçersiz kılın , aynı şekildeprompt işlevi .

Lee Holmes (harika Windows PowerShell Yemek Kitabı'nın yazarı) tarafından aradığınıza çok benzeyen bir tabexpansion geçersiz kılma tanımlayan bu makaleyi buldum . Muhtemelen size tam olarak ne istediğinizi vermek için ince ayar yapabilirsiniz.

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.