ย้อนกลับการค้นหาประวัติในทุบตีตามด้วยปุ่มลูกศรทำให้เคอร์เซอร์ปรากฏในตำแหน่งที่ไม่ถูกต้อง


10

ฉันสังเกตว่าหลายครั้งเมื่อฉันย้อนกลับการค้นหาประวัติจากบรรทัดคำสั่งผ่านCTRL+ rหากฉันต้องการแก้ไขคำสั่งบางครั้งเคอร์เซอร์จะกระโดดไปยังตำแหน่งที่ไม่ถูกต้องเมื่อฉันกดแป้นลูกศรหรือป้อนCTRL+ aหรือCTRL+ e. PS1ตำแหน่งที่เฉพาะเจาะจงมันกระโดดไปดูเหมือนว่าจะมีการชดเชยเท่ากับขนาดของบรรทัดคำสั่งของฉันพรอมต์เป็นชุดใน

สิ่งนี้ทำให้เกิดความยากลำบากเนื่องจากตำแหน่งที่แท้จริงของเคอร์เซอร์แตกต่างจากตำแหน่งที่แสดงบนหน้าจอ การแก้ไขคำสั่งในอนาคตจะถูกสร้างการแสดงผลราวกับว่าเคอร์เซอร์อยู่ในตำแหน่งที่ถูกข้ามไป แต่คำสั่งจริงจะรักษาตำแหน่งที่ถูกต้องโดยไม่มีการข้ามใด ๆ

ไม่มีใครรู้ว่าสิ่งที่ทำให้เกิดปัญหานี้หรือวิธีการแก้ไขหรือไม่

แก้ไข: ถ้าฉันเพิ่มบรรทัดใหม่ในตอนท้ายของPS1ปัญหาดูเหมือนว่าจะหายไป อย่างไรก็ตามฉันต้องการป้อนคำสั่งในบรรทัดเดียวกันกับพรอมต์

คำตอบ:


6

ซึ่งมักเกิดจากคำสั่งในประวัติของคุณที่ยาวกว่า 1 บรรทัด เมื่อคุณเลือกรายการที่สั้นกว่าออกจากประวัติดูเหมือนจะไม่คำนึงถึงความกว้างของพรอมต์ในการเรนเดอร์บรรทัดคำสั่งอีกครั้งดังนั้นทุกอย่างหลังจากคำสั่งยาวนั้นจะเป็นเกลียว

ทางออกที่ง่ายที่ฉันพบคือกดปุ่มโฮมแทรก "echo" และกด Enter จากนั้นจำคำสั่งสุดท้ายแล้วแก้ไขจากตรงนั้น (ขั้นแรกให้ลบเสียงก้อง :)


ขอบคุณฉันพยายามจริงเมื่อไม่นานมานี้ ในกรณีของฉันฉันสะเพร่าและเป่าแฟ้มเพราะมีท่อในคำสั่งที่กลืนก้อง คุณถูกต้องดูเหมือนว่าจะมีผลกับคำสั่งยาวตามการทดลองของฉันเท่านั้น
เบื่อ

ทางออกที่ดีกว่าเสียงสะท้อนที่ฉันเพิ่งค้นพบ: ต่อท้าย '#' ต่อท้ายบรรทัดแทนที่จะเป็นเสียงสะท้อน วิธีนี้ทุบตีปฏิบัติต่อทั้งบรรทัดเช่นความคิดเห็น
เบื่อ

1
ยังดีกว่า: ปัญหาดูเหมือนว่าจะหายไปหากบรรทัดปัจจุบันถูกวาดใหม่ ทั้ง Cl เพื่อล้างหน้าจอและวาดใหม่บรรทัดปัจจุบันหรือสร้างการเชื่อมโยงคีย์สำหรับฟังก์ชัน unraw-current-line ที่ไม่ถูกโยง
เบื่อ

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

13

บางทีคุณอาจมีลำดับการหลีกเลี่ยงที่ไม่ได้พิมพ์ใน PS1 ไม่ได้อยู่ใน \ [และ \]

ตรวจสอบให้แน่ใจว่าคุณได้ปิดสิ่งเหล่านี้ทั้งหมด:

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]

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