ทำไมโหมดวางแบบวงเล็บถูกเปิดใช้งานเป็นระยะในหน้าจอเทอร์มินัลของฉัน


23

ฉันใช้ Ubuntu 14.04 และฉันมีปัญหาแปลก ๆ กับหน้าจอเทอร์มินัลของฉันซึ่งทำให้ฉันเบื่อมาก มีคนช่วยฉันด้วยหรืออธิบายฉันว่าฉันทำอะไรผิดหรือไม่ใช้ระบบปฏิบัติการลินุกซ์? ฉันมีวิธีแก้ปัญหาบางอย่าง แต่ฉันต้องการเข้าใจว่าทำไมสิ่งนี้ถึงเกิดขึ้นซ้ำแล้วซ้ำอีก

ฉันมักจะคัดลอกคำสั่ง bash จากบันทึกย่อของฉันหรือจากอินเทอร์เน็ตและบางครั้งฉันได้รับสัญลักษณ์แปลก ๆ 0 ~ และ 1 ~ ซึ่งล้อมรอบสิ่งที่ฉันคัดลอก มันน่ารำคาญมากและมันเกิดขึ้นแบบสุ่มทั้งหมด

หลังจากการค้นหาเป็นเวลานานฉันพบว่าสิ่งนี้เรียกว่าโหมด bracked pasteดังนั้นตอนนี้ฉันใช้คำสั่งนี้printf "\e[?2004l"เพื่อแก้ไขเทอร์มินัลของฉันหากโหมดนี้เปิดใช้งานทันที

เป็นไปได้ไหมที่จะปิดการใช้งานคุณสมบัตินี้อย่างถาวร? ฉันต้องเผชิญกับมันในทุกเครื่องของ Ubuntu ที่ฉันทำงานตอนนี้ ก่อนหน้านี้ฉันใช้ Ubuntu 10.10 และ 12.04 และฉันไม่เคยมีปัญหาดังกล่าวมาก่อน

คำตอบ:


11

คุณสามารถปิดใช้งานโหมดวางที่อยู่ในวงเล็บ

หากต้องการลองชั่วคราวใน bash:

bind 'set enable-bracketed-paste off'

จากนั้นถ้าคุณชอบวิธีการทำงานคุณสามารถตั้งค่าไว้ในระบบของคุณ~/.inputrcหรือที่/etc/inputrc(หรือที่ใดก็ตามที่อยู่ใน Ubuntu)


4
ทั้งหมดนี้ดูเหมือนว่าจะทำให้ฉันเป็นดังนั้นฉันจึงไม่สามารถพิมพ์ตัวอักษร "p" (และเป็นเพียงตัวพิมพ์เล็ก "p") หรือวางแบบนี้เลยไม่มีอะไร
ไบรอันพูดว่า Reinstate Monica

@BrianLeishman เนื่องจากวิธีการพิเศษในการbindแยกวิเคราะห์อาร์กิวเมนต์ที่ไม่รู้จักนั่นคือสิ่งที่จะเกิดขึ้นหากคุณเรียกใช้คำสั่งนี้โดยใช้ Readline ก่อนเวอร์ชัน 7 หรือ Bash ก่อน 4.4 คำตอบนี้จะไม่ทำสิ่งใดที่มีประโยชน์จนกระทั่ง Ubuntu รุ่นต่อไป (17.04)
Anthony G - ความยุติธรรมสำหรับโมนิก้า

printfวิธีนี้ใช้งานได้ แต่ไม่ได้ผลเมื่อใส่ในของฉัน.bashrcและคุณลักษณะจะเปลี่ยนเป็นระยะ ๆ bindวิธีการแบ่งแป้นพิมพ์ของฉัน ( pที่สำคัญไม่ทำงาน, and putting that line in my ~ / .inputrc` ทำงานเป็นเวลา 10 วินาทีและจากนั้นจะเริ่มต้นคอนโซล Barfing ออก-enaset-enaset-...ตลอดไปหลังจาก 10 วินาทีในการใช้. ในที่สุดผมก็อัพเกรดด้วยตนเองเพียงเพื่อทุบตี 4.4 จากแหล่งในการแก้ไขปัญหาที่โง่ ปัญหา
Cloud

1
คำสั่งที่ถูกต้องคือbind 'set enable-bracketed-paste off'(เว้นวรรคแทนที่จะเป็นตัวแรก `- '' ดูเหมือนว่าจะไม่สามารถแก้ไขอักขระได้เพียงตัวเดียว
Arrow

7

bashrcคุณสามารถใส่คำสั่งว่าในของคุณ จากนั้นจะมีผลทุกครั้งที่คุณเปิดเครื่อง

เพียงพิมพ์vi ~/.bashrcและเพิ่มprintf "\e[?2004l"ที่ส่วนท้ายแล้วบันทึกไฟล์ด้วย:wq


ใช่ฉันทำสิ่งนี้ในตอนแรกจริง ๆ แล้ว :) หลังจากนั้นฉันเพิ่งปิดใช้งานโหมดนี้ตามที่ @jwd แนะนำ
artemdevel

1
echo 'printf "\e[?2004l"' >> ~/.bashrcทำสิ่งเดียวกันในหนึ่งบรรทัดและคุณสามารถตรวจสอบtail -n1 ~/.bashrcได้ viไม่มีความจำเป็นที่จะใช้เป็น
pzkpfw

6

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

  • คอมพิวเตอร์ที่บ้านของฉันมี zsh เวอร์ชั่นใหม่ที่รองรับการวางวงเล็บ (ลองเรียกว่าเชลล์ A)
  • ฉันใช้คอมพิวเตอร์ร่วมกับที่เชลล์ตั้งค่าเป็นทุบตีรุ่นเก่ากว่าซึ่งไม่รองรับการวางวงเล็บ (เชลล์ B)

ปัญหาคือโปรแกรมเทอร์มินัลของฉันยังคงคิดว่ามีการเปิดใช้งานการวางวงเล็บในขณะที่ sshing จากเชลล์ A ไปยังเชลล์ B ดังนั้นมันจึงเพิ่มอักขระรอบเนื้อหาที่คุณวาง (0 ~ และ 1 ~ บิต) เชลล์บีไม่สนับสนุนพวกมันดังนั้นมันจึงผ่านมันไม่เปลี่ยนแปลง คุณต้องบอกให้เทอร์มินัลปิดการวางวงเล็บโดยให้เปลือกของคุณพิมพ์ลำดับ escape พิเศษ - ซึ่งเป็นสิ่งที่printf "\e[?2004l"ทำ

มีสองสามวิธีในการแก้ไขปัญหา:

  1. หากคุณไม่สนใจเกี่ยวกับการวางแบบวงเล็บเหลี่ยมเลยให้ปิดมันในเชลล์ A ดังนั้นจึงไม่เคยเปิดใช้งานเลยตั้งแต่แรก (@ jwd คำตอบ)

  2. หากคุณต้องการใช้การวางวงเล็บบนเชลล์ A ต่อไป แต่ปิดการใช้งานบนเชลล์ B ให้เพิ่มลำดับการหลีกเลี่ยง.bashrc(@ คำตอบของ MOHRE)

  3. อัพเกรดเชลล์ B เพื่อรองรับการวางวงเล็บเหลี่ยมดังนั้นจึงแปลความหมายอักขระเหล่านี้ได้ 0 ~ และ 1 ~

หมายเหตุด้านข้าง: หากคุณใช้หน้าจอ GNU คุณจะต้องเรียกใช้printfคำสั่งนั้นนอกหน้าจอ ดูเหมือนจะไม่ทำงานในขณะที่อยู่ข้างใน


ขอบคุณ @rjh :) แต่ฉันไม่เคยใช้ zsh หรือมีปัญหากับ ssh ตามที่คุณอธิบาย ดูเหมือนว่าบางสิ่งบางอย่างเพิ่งตั้งค่าผิดพลาดใน Ubuntu เมื่อหลายปีก่อน
artemdevel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.