เป็นไปได้ไหมที่การเติมข้อความอัตโนมัติใน Powershell ทำงานเหมือนกับทุบตี?


19

ฉันรัก Powershell แต่มาจากพื้นหลัง Linux มีบางสิ่งที่ทำให้ฉันรำคาญจริงๆ เช่นตัวอย่างว่าการเติมข้อมูลอัตโนมัติเริ่มต้นทำงานอย่างไร

ตัวอย่างเช่น: Get-PS ขยายเป็น "Get-PSBreakpoint" ซึ่งเป็นคำสั่งแรกที่ตรงกัน ใน bash หากมีเพียงหนึ่งคำสั่ง bash ที่ตรงกันจะขยายไปยังคำสั่งที่ตรงกัน หากมีแท็บการกดปุ่มหลายครั้งหนึ่งครั้งก็ไม่ทำอะไรเลยแท็บการแตะสองครั้งจะแสดงรายการคำสั่งที่ตรงกัน แต่ไม่ขยาย มีวิธีที่จะทำให้ Powershell ทำงานเช่นนี้หรือไม่?

และอีกอย่างหนึ่งถ้าฉันเขียนหนึ่งบรรทัดและย้ายเครื่องหมายกลับไปที่คำสั่งก่อนหน้า (เครื่องหมายคือตำแหน่งที่ ^):

"Get-PSS ^ | Remove-PSSession" อัตโนมัติเสร็จสมบูรณ์เป็น "Get-PSSession ^" โดยลบคำสั่งที่ต่อท้ายทั้งหมด ในทุบตีคำสั่งต่อท้ายจะยังคงไม่ได้รับผลกระทบ มีวิธีที่จะทำให้ Powershell ไม่ลบคำสั่งที่ต่อท้ายเมื่อทำการเติมอัตโนมัติหรือไม่?

โบนัสจะได้รับ CTRL + L เพื่อล้างหน้าจอ CTRL + A เพื่อไปที่จุดเริ่มต้นของบรรทัดและ CTRL + E เพื่อไปยังจุดสิ้นสุดของบรรทัด


ฉันโพสต์คำตอบสำหรับคำถามของคุณ แต่สิ่งที่ตลกคือฉันมาถึงคำถามนี้เพราะฉันกำลังมองหาสิ่งที่ตรงกันข้าม ... ฉันต้องการสไตล์ PowerShell ที่สมบูรณ์ในการทุบตี :)
Robert S Ciaccio

การเติมสไตล์ PowerShell มีให้ในแบบทุบตี - มองหาเมนูฟังก์ชั่นที่สมบูรณ์
Jason Shirk

โชคดีที่เราทุบตี Windows 10 ทันที
byxor

คำตอบ:


12

ตรวจสอบPSReadline

จากบทความ:

โมดูลนี้แทนที่ประสบการณ์การแก้ไขบรรทัดคำสั่งใน PowerShell.exe มันให้:

  • ไวยากรณ์สี
  • การแจ้งเตือนข้อผิดพลาดทางไวยากรณ์อย่างง่าย
  • ประสบการณ์หลายบรรทัดที่ดี (ทั้งการแก้ไขและประวัติ)
  • การเชื่อมโยงคีย์ที่ปรับแต่งได้
  • โหมด Cmd และ emacs (ยังไม่ได้ใช้งานอย่างเต็มที่ แต่ทั้งคู่ใช้งานได้)
  • ตัวเลือกการกำหนดค่ามากมาย
  • Bash style complete (เป็นทางเลือกในโหมด Cmd, เป็นค่าเริ่มต้นในโหมด Emacs)
  • การค้นหาประวัติแบบโต้ตอบสไตล์ Bash / zsh (CTRL-R)
  • Emacs ดึง / ฆ่าวงแหวน
  • PowerShell โทเค็นเคลื่อนไหว "ฆ่า" และฆ่า
  • ยกเลิกทำซ้ำ
  • การบันทึกประวัติโดยอัตโนมัติรวมถึงประวัติการแบ่งปันข้ามเซสชันสด
  • เสร็จสิ้น "เมนู" (ค่อนข้างคล้ายกับ Intellisense เลือกเสร็จด้วยลูกศร) ผ่าน Ctrl + Space

ฉันใช้มันทุกวัน!


4
เมื่อคุณติดตั้ง PSReadLine คุณจะต้องเปิดใช้งานการเติมแท็บสไตล์ bash ให้สมบูรณ์โดยเพิ่มสิ่งนี้ลงในโปรไฟล์ของคุณ:Set-PSReadlineKeyHandler -Key Tab -Function Complete
brianpeiris

3
PSReadLine ได้รับการติดตั้งโดยค่าเริ่มต้นใน Windows 10 เพียงแค่ใส่บรรทัดการตั้งค่าที่ @brianpeiris พูดถึงในโปรไฟล์ของคุณและคุณก็พร้อมที่จะไป
Don Cruickshank

ลองใช้CompleteMenuแทนCompleteเพื่อรับประสบการณ์ที่เหมือนทุบตีมากขึ้นมันช่วยให้คุณใช้ปุ่มลูกศรเพื่อนำทางตัวเลือกต่าง ๆ ได้
stib

3

บางทีคุณควรดูที่Powertabซึ่งเป็นส่วนขยาย PowerShell Tab ที่ปรับแต่งได้


2
ขอบคุณ! Powertab ทำให้การขยายแท็บดีขึ้นจริงๆ ถึงกระนั้นก็ยังมีปัญหาการทำบางสิ่งที่ไม่ได้อยู่ที่ท้ายคำสั่ง
Peter Moberg

2

สวัสดีปีเตอร์เพียงแค่กดF8เพื่อค้นหาความเร็ว มันเสร็จสิ้นด้วยคำสั่งที่คุณเรียกใช้ก่อนหน้านี้ที่เริ่มต้นด้วยสิ่งที่คุณมีในบรรทัด ปัญหาเกี่ยวกับการลบการติดตามเป็นที่น่ารำคาญฉันเขียนคำแนะนำในการเชื่อมต่อเกี่ยวกับปัญหาเดียวกัน ในเวลาหลักคุณสามารถใช้ Powershell ISE ซึ่งจะทำงานได้ดีขึ้นเล็กน้อย (อย่าลบอักขระที่ต่อท้าย)


2

ระบบย่อย command.exe เก่ายังคงมีส่วนเกี่ยวข้องใน PowerShell และบังคับให้มีพฤติกรรมที่ไม่พึงประสงค์มากมาย แต่ในฐานะของ PowerShell v3 ตอนนี้ GUI (PowerShell ISE) สามารถใช้งานได้แล้วและยังรวมถึงประสบการณ์การเติมเต็มที่ทันสมัยมากขึ้น + การปรับสี

ป้อนคำอธิบายรูปภาพที่นี่


2

PowerShell ใช้คุณสมบัติคอนโซลเช่นเดียวกับพรอมต์คำสั่งที่น่าเชื่อถือ ดังนั้นคุณจึงมี Home / End ตามปกติและ:

  • F3 เพื่อแสดงคำสั่งก่อนหน้า
  • F1 เพื่อคัดลอกอักขระเดียวจากคำสั่งก่อนหน้า
  • F7 หน้าต่างประวัติป๊อปอัพ

... แต่ไม่มีสิ่งอำนวยความสะดวกใด ๆ ที่จะแสดงความสำเร็จที่เป็นไปได้ทั้งหมดเท่าที่ฉันรู้


นี่ยังคง จำกัด มากเมื่อเทียบกับทุบตีเก่าที่ดี ตัวอย่างเช่นมันยอดเยี่ยมมากที่สามารถพิมพ์ ctrl + r (speedearch) ใน bash และเพียงแค่เริ่มพิมพ์และคำสั่งก่อนหน้านี้ที่ตรงกันจะปรากฏขึ้น
Peter Moberg

1

PowerShell ปกติใช้ cmd เป็นหน้าต่างพรอมต์คำสั่ง นั่นเป็นเหตุผลที่มันมีมรดกที่ยิ่งใหญ่ (โปรแกรมถ่ายทอดพฤติกรรมของ cmd เก่ามานาน) ที่ไม่สามารถเปลี่ยนแปลงได้เนื่องจากการเปรียบเทียบย้อนหลัง

ฉันแนะนำให้คุณใช้powershell_iseแทนที่จะเป็น powershell (รวมอยู่ในชุดของ powershell มาตรฐาน) เวอร์ชัน 3.0 (ไม่แน่ใจเกี่ยวกับก่อนหน้านี้) รองรับ Intellisense จากกล่อง นี่เป็นสไตล์ที่ใกล้เคียงกับการทุบตีมาก เพียงกดCtrl + Spaceแทน Tab ฉันประสบปัญหากับการทำ PowerTab แบบกำหนดเองให้เสร็จสมบูรณ์ แต่ Intellisense สามารถใช้งานได้ดี Powershell_ise ยังคงคำสั่งที่ตามมา, มีโหมดเลือกปกติ, สนับสนุน Ctrl + C, Ctrl + V, Ctrl + A สำหรับคำสั่งที่เลือกเพื่อป้อน, ดังนั้น Ctrl + A, ข้ามไปยังการขอร้องของบรรทัด, Ctrl + A, ไปยังจุดสิ้นสุด (หรือ Home / End)


0

PowerShell ใช้ parser ของตัวเองสำหรับคำสั่งดังนั้นในกรณีที่เป็นเชลล์ที่แตกต่างจาก cmd.exe ถึงแม้ว่าพวกเขาจะใช้เทอร์มินัลเดียวกัน (หน้าต่าง gui)

เนื่องจากความแตกต่างนั้น PowerShell ช่วยให้คุณสามารถแทนที่ฟังก์ชันการเติมแท็บด้วยฟังก์ชันของคุณเอง ฉันไม่ได้มีเวลายุ่งกับตัวเอง แต่โดยทั่วไปคุณแทนที่ฟังก์ชั่นtabexpansionในโปรไฟล์ของคุณเช่นเดียวกับที่คุณสามารถแทนที่promptฟังก์ชั่น

ฉันพบบทความนี้โดยLee Holmes (ผู้เขียนตำรา Windows PowerShell ที่ยอดเยี่ยม ) ซึ่งอธิบายการแทนที่ tabexpansion ที่คล้ายกับสิ่งที่คุณกำลังมองหา คุณอาจปรับแต่งมันเพื่อให้สิ่งที่คุณต้องการ

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