Dimungkinkan untuk membuat pelengkapan otomatis di Powershell berfungsi seperti di bash?

19

Saya suka Powershell, tetapi dari latar belakang Linux ada beberapa hal yang benar-benar mengganggu saya. Seperti misalnya cara penyelesaian otomatis default berfungsi.

Sebagai contoh: Get-PS memperluas ke "Get-PSBreakpoint" yang merupakan perintah pencocokan pertama. Dalam bash jika hanya ada satu perintah yang cocok, bash akan memperluas ke perintah yang cocok. Jika ada beberapa tab memukul sekali tidak melakukan apa-apa, tab ketuk ganda akan menampilkan daftar perintah yang cocok tetapi tidak berkembang. Apakah ada cara untuk membuat Powershell bersikap seperti ini?

Dan satu hal lagi, jika saya telah menulis satu baris, dan memindahkan marker kembali ke perintah sebelumnya (marker adalah di mana ^ berada):

"Get-PSS ^ | Remove-PSSession" otomatis menyelesaikan ke "Get-PSSession ^", menghapus semua perintah tambahan. Dalam bash perintah trailing masih akan ada di sana tidak terpengaruh. Apakah ada cara untuk membuat Powershell tidak menghapus perintah tambahan saat menyelesaikan otomatis?

Bonus adalah untuk mendapatkan CTRL + L untuk menghapus layar. CTRL + A untuk pergi ke awal baris, dan CTRL + E untuk pergi ke akhir baris.

Peter Moberg
sumber
Saya mengirim jawaban untuk pertanyaan Anda, tetapi lucunya, saya tiba di pertanyaan ini karena saya sedang mencari kebalikannya ... Saya ingin penyelesaian gaya PowerShell di bash :)
Robert S Ciaccio
Penyempurnaan gaya PowerShell tersedia dalam bash - cari fungsi-menu lengkap
Jason Shirk
Untungnya kami memiliki bash di windows 10 sekarang.
byxor

Jawaban:

11

Lihat PSReadline .

Dari artikel:

Modul ini menggantikan pengalaman pengeditan baris perintah di PowerShell.exe. Ini menyediakan:

  • Pewarnaan sintaks
  • Pemberitahuan kesalahan sintaksis sederhana
  • Pengalaman multi-jalur yang baik (baik pengeditan maupun riwayat)
  • Binding kunci dapat disesuaikan
  • Mode Cmd dan emacs (belum sepenuhnya diimplementasikan, tetapi keduanya dapat digunakan)
  • Banyak opsi konfigurasi
  • Penyelesaian gaya Bash (opsional dalam mode Cmd, default dalam mode Emacs)
  • Pencarian riwayat interaktif gaya Bash / zsh (CTRL-R)
  • Emacs mencabut / membunuh cincin
  • Token PowerShell berbasis gerakan "word" dan bunuh
  • Undo / redo
  • Penyimpanan riwayat otomatis, termasuk berbagi riwayat di seluruh sesi langsung
  • "Menu" selesai (agak seperti Intellisense, pilih selesai dengan panah) melalui Ctrl + Spasi

Saya menggunakannya setiap hari!

David Mohundro
sumber
4
Setelah Anda menginstal PSReadLine, Anda harus mengaktifkan penyelesaian bash-style tab dengan menambahkan ini ke profil Anda:Set-PSReadlineKeyHandler -Key Tab -Function Complete
brianpeiris
3
PSReadLine sekarang terinstal secara default di Windows 10. Masukkan saja garis konfigurasi yang @brianpeiris sebutkan ke profil Anda dan Anda siap melakukannya.
Don Cruickshank
Coba gunakan CompleteMenualih-alih Completeuntuk pengalaman yang lebih mirip bash, ini memungkinkan Anda menggunakan tombol panah untuk menavigasi pilihan
stib
3

Mungkin Anda harus melihat Powertab , perluasan PowerShell Tab yang dapat disesuaikan.

harrymc
sumber
2
Terima kasih! Powertab benar-benar membuat ekspansi tab jauh lebih baik. Namun, masalah menyelesaikan sesuatu yang tidak ada di akhir perintah ada di sana.
Peter Moberg
2

hai peter cukup tekan F8 untuk sesuatu seperti pencarian cepat. Itu selesai dengan perintah yang Anda jalankan sebelumnya yang dimulai dengan apa yang Anda miliki di baris. Masalah dengan penghapusan trailing itu mengganggu, saya menulis saran di Connect tentang masalah yang sama. Di waktu utama Anda dapat menggunakan Powershell ISE, itu berperilaku sedikit lebih baik (jangan menghapus karakter yang tertinggal).

mjsr
sumber
2

Subsistem command.exe lama masih terlibat dalam PowerShell, dan memaksa banyak perilaku tidak menyenangkan. Tetapi pada PowerShell v3, GUI (PowerShell ISE) sekarang dapat digunakan, dan itu mencakup pengalaman penyelesaian + pewarnaan yang jauh lebih modern.

masukkan deskripsi gambar di sini

Jay Bazuzi
sumber
2

PowerShell menggunakan fitur konsol yang sama dengan Command Prompt yang terhormat; jadi Anda memiliki Beranda / Akhir yang biasa, dan:

  • F3 untuk memunculkan perintah sebelumnya
  • F1 untuk menyalin satu karakter dari perintah sebelumnya
  • F7 jendela riwayat popup

... tapi tidak ada fasilitas untuk menunjukkan semua kemungkinan penyelesaian, sejauh yang saya tahu.

njd
sumber
Ini masih sangat terbatas dibandingkan dengan bash tua yang baik. Sebagai contoh sangat bagus bisa mengetik ctrl + r (pencarian cepat) di bash dan mulai mengetik dan perintah yang cocok sebelumnya akan muncul.
Peter Moberg
1

Powerhell biasa menggunakan cmd sebagai jendela command prompt. Itu sebabnya ia memiliki warisan besar (program menyampaikan perilaku cmd lama untuk usia) yang tidak dapat diubah karena keterbandingan mundur.

Saya sarankan Anda menggunakan powershell_ise alih-alih powershell (ini termasuk dalam bundel powershell standar). Versi 3.0 (tidak yakin tentang sebelumnya) mendukung Intellisense dari kotak. Ini sangat dekat dengan gaya penyelesaian pesta. Tekan saja Ctrl + Space, bukan Tab. Saya mengalami masalah dengan penyelesaian kustom di PowerTab, tetapi Intellisense berfungsi dengan baik. Powershell_ise juga mempertahankan perintah trailing, memiliki mode pilih normal, mendukung Ctrl + C, Ctrl + V, Ctrl + A untuk memilih perintah yang dimasukkan, jadi Ctrl + A, lompat ke pengemis baris, Ctrl + A, sampai akhir (atau Rumah /Akhir).

xvorsx
sumber
0

PowerShell menggunakan parser sendiri untuk perintah, jadi dalam arti itu adalah shell yang berbeda dari cmd.exe, meskipun mereka berbagi terminal yang sama (jendela gui).

Karena perbedaan itu, PowerShell memungkinkan Anda untuk mengganti fungsionalitas penyelesaian-tab dengan fungsi Anda sendiri. Saya belum punya waktu untuk mengacaukan ini sendiri, tetapi Anda pada dasarnya menimpa fungsi tabexpansiondi profil Anda, dengan cara yang sama Anda dapat menimpa promptfungsi tersebut.

Saya menemukan artikel ini , oleh Lee Holmes (penulis Windows PowerShell Cookbook yang mengagumkan ), yang menjelaskan penggantian tabexpansion yang sangat mirip dengan yang Anda cari. Anda mungkin dapat men-tweak untuk memberikan apa yang Anda inginkan.

Robert S Ciaccio
sumber