วิธีทำให้แท็บ PowerShell เสร็จสมบูรณ์เหมือน Bash


110

สมมติว่าฉันมีไฟล์ต่อไปนี้ในไดเร็กทอรีปัจจุบันของฉัน:

buildBar.bat
buildFoo.bat
buildHouse.bat

และฉันพิมพ์ต่อไปนี้ที่พร้อมรับคำสั่งของฉันแล้ว./buTAB

  • ใน Bash จะขยายเป็น ./build

  • ใน PowerShell จะขยาย./buildBar.batเป็นรายการแรกในรายการ

  • ใน Cmd ลักษณะการทำงานจะเหมือนกับ PowerShell

ฉันชอบพฤติกรรม Bash - มีวิธีทำให้ PowerShell ทำงานเหมือน Bash หรือไม่?


2
คุณสามารถใช้ Cygwin's bash;)
Blender

13
ใช่นั่นคือสิ่งที่ฉันทำในช่วงทศวรรษที่ผ่านมา แต่ฉันกำลังพยายามเปลี่ยนไปใช้ PowerShell เพราะฉันต้องการที่จะบินบนบรรทัดคำสั่งบนระบบอื่นที่ไม่ใช่ของฉันเองโดยที่ Cygwin ไม่ใช่ ติดตั้ง
RobSiklos

คำตอบ:


180

PowerShell เวอร์ชันใหม่รวมถึง PSReadline ซึ่งสามารถใช้ทำสิ่งนี้ได้:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

หากต้องการทำให้เป็นแบบถาวรให้ใส่คำสั่งนี้ใน C: \ Users \ [User] \ Documents \ WindowsPowerShell \ profile.ps1


30
MenuCompleteแทนที่จะCompleteเป็นเหมือนทุบตี แต่ให้คุณใช้ปุ่มลูกศรเพื่อเลือกจากตัวเลือกที่มีอยู่
stib

1
@ LeBleu มันแปลกมากเพราะเครื่อง Windows 10 ใหม่ล่าสุดของฉันมาพร้อมกับ PSReadline ฉันคิดว่าโมดูลนี้มาจาก Microsoft
Franklin Yu

9
BTW หากไม่มีไฟล์ 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

22

ตอนนี้คุณสามารถรับ PowerShell เพื่อทำแบบ Bash ให้เสร็จสมบูรณ์โดยใช้ PSReadline

ตรวจสอบบล็อกโพสต์ทุบตีเหมือนเสร็จแท็บใน PowerShell


4
ลิงก์ในบล็อกโพสต์ใช้งานไม่ได้อย่างไรก็ตามในตอนท้ายของวันนี้จะนำคุณไปยังPsReadline (การกระทำครั้งสุดท้ายในปี 2012)ซึ่งถูกแยกออก (การกระทำครั้งสุดท้ายในปี 2013)
GameScripting

6
ปัจจุบันคุณสามารถทำได้ด้วยซับเดียวตามที่อธิบายไว้ที่นี่: stackoverflow.com/a/37715242/24874
Drew Noakes

15

ดูที่นี่ไม่ใช่ desiderata ของคุณจริงๆ:

PowerTab

แต่ฉันคิดว่าเป็นคุณสมบัติการขยายแท็บที่ดีที่สุดสำหรับคอนโซล PowerShell !!!


น่าสนใจ. หากมีวิธีทำบางอย่างเช่นนั้นดูเหมือนว่าจะค่อนข้างเป็นไปได้ที่จะทำให้ส่วนขยายทำงานเหมือนทุบตี ฉันยังห่างไกลจากการเป็นผู้เชี่ยวชาญใน PowerShell แม้ว่าอาจจะขาดบางอย่างไป
Andriy M

ชัวร์! เริ่มศึกษาโค้ดของโมดูล PowerTab เพื่อลองขยายความต้องการของคุณ แต่ PowerTab เสนอการขยายสำหรับคำสั่งเกือบทุกคำสั่ง wmi, comobject, การประกอบด้วยวิธีการเลือกที่ง่าย!
CB.

9

tab กรอกชื่อคำสั่งเท่านั้นไม่ใช่อาร์กิวเมนต์ / พารามิเตอร์ก่อนหน้า

เพื่อเติมคำสั่งที่สมบูรณ์โดยอัตโนมัติด้วยอาร์กิวเมนต์จากประวัติตั้งค่าการเชื่อมโยงคีย์ด้านล่าง

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

ตอนนี้พิมพ์ชื่อคำสั่งไม่กี่อักขระและใช้ลูกศรขึ้น / ลงเพื่อเติมคำสั่งนี้โดยอัตโนมัติ (พร้อมอาร์กิวเมนต์) จากประวัติ

ประหยัดเวลาจริง


5

ปรับเปลี่ยนฟังก์ชัน TabExpansion เพื่อให้บรรลุสิ่งที่คุณต้องการ โปรดจำไว้ว่าบางทีอาจจะเสร็จสมบูรณ์จนจบหากคุณกดแท็บอีกครั้งคำแนะนำใหม่จะแก้ไขจากที่ที่คุณกดปุ่มเดิม ฉันชอบพฤติกรรมที่แท้จริงเป็นอย่างมากฉันต้องการให้เส้นเขียนให้เร็วที่สุด สุดท้ายอย่าลืมการขยายสัญลักษณ์ตัวแทนตัวอย่างเช่น bu * h [Tab] จะเสร็จสมบูรณ์โดยอัตโนมัติใน buildHouse.bat


การปรับเปลี่ยนฟังก์ชัน TabExpansion อาจเป็นวิธีที่จะไปได้ แต่ยังคงซับซ้อนกว่าที่ฉันกำลังมองหาอยู่มาก ฉันคิดว่าฉันจะต้องใช้พาวเวอร์เชลล์ให้คล่องขึ้นก่อนที่ฉันจะสามารถจัดการกับมันได้
RobSiklos

3
# 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

2

ด้วย Powershell Core เราสามารถตั้งค่าคุณสมบัติ PredictionSource สำหรับ PSReadLine เป็นประวัติเพื่อรับคำแนะนำอัตโนมัติ อ้างอิงวิดีโอ YouTube สำหรับรายละเอียดเพิ่มเติม https://youtu.be/I0iIZe0dUNw

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.