ป้องกันการวางหลายบรรทัดในทุบตี


10

ฉันมักจะใช้ctrl+cเพื่อคัดลอกข้อความจากแอปพลิเคชั่น gui บางส่วนแล้ววางลงในเทอร์มินัลอีมูเลเตอร์ (เทอร์มิเนเตอร์) โดยใช้เมนูคลิกเมาส์ขวาและวาง บางครั้งฉันลืมว่าคลิปบอร์ดมีหลายบรรทัดซึ่งเมื่อวางลงในทุบตีทำให้แต่ละบรรทัดจะ "ดำเนินการ"

มีวิธีแก้ปัญหาเพื่อป้องกันการวางหลายบรรทัดทั้งหมดหรือไม่?


วางลงใน Notepad แรกเพื่อดูว่าคุณมีแล้วถ้ามันจะตกลงไปข้างหน้าเพื่อวางลงในใบสมัครของคุณ
Skaperen

1
ในทุบตีเรียกใช้คำสั่งsleep 999999แล้ววางถ้ามันดูโอเค ctrl+cคำสั่งการนอนหลับไม่ได้อ่านบรรทัดและพวกเขาจะถูกยกเลิกเมื่อคุณกด
Skaperen

2
เกี่ยวข้อง: security.stackexchange.com/q/39118
Stéphane Chazelas

3
รุ่นถัดไปของbashจะมีการสนับสนุนสำหรับการวางวงเล็บ , zshมีอยู่แล้วผ่านทางปลั๊กอินของบุคคลที่ 3
Stéphane Chazelas

1
@Ousus printf '\e[?2004h'ในเทอร์มินัลอีมูเลเตอร์คล้าย xterm ส่วนใหญ่เปิดใช้งานโหมด bracketed-paste ซึ่งเทอร์มินัลจะวงเล็บข้อความที่วางไว้เพื่อให้แอปพลิเคชันสามารถตรวจจับได้ว่าจุดเริ่มต้นของการวาง xterm ยังสนับสนุนโหมดอื่นด้วย\e[?2005hซึ่งอักขระที่วางทั้งหมดถูกนำหน้าด้วย^V(เข้าใจโดยแอ็พพลิเคชันจำนวนมากและวินัยของ tty line as litteral-next)
Stéphane Chazelas

คำตอบ:


5

คำตอบนี้ไม่เฉพาะเจาะจงมากที่สุดสำหรับคำถามของผู้ใช้โปรดดูคำตอบที่ 2 ของฉัน ฉันจะออกจากที่นี่เพราะมันแก้ไขปัญหาทั่วไปมากขึ้น

ต่อการแสดงความคิดเห็นในการโพสต์ต้นฉบับของคุณคุณต้อง (1) โปรแกรมจำลองสถานีที่รองรับวงเล็บวางและ (2) vimการสนับสนุนสำหรับสิ่งที่จะทำงานในสถานีที่สอดคล้องกันคือbash, zsh, เทอร์มินัลอีมูเลเตอร์ที่สนับสนุนการวางวงเล็บ (รายการที่จะปรับปรุงตามความคิดเห็นของโพสต์นี้):

  • xterm - ตั้งแต่ ??
  • gnome-terminal - ตั้งแต่ ??
  • putty - ตั้งแต่ 0.63 (วันที่วางจำหน่าย 2013-08-06)

แอพพลิเคชั่นรองรับโหมดฉากยึด:

  • vim
  • zsh

สำหรับbashStéphaneChazelasได้รวบรวมเชลล์สคริปต์ไว้เพื่ออำนวยความสะดวกในการตรวจจับโหมดนั้นและดำเนินการที่เหมาะสม

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

ผู้จัดการคลิปบอร์ดบางทีสิ่งที่คุณต้องการ


สคริปต์ที่อยู่ในนั้นตรวจไม่พบแปะที่วางวงเล็บมันเป็นสคริปต์perlที่ลอกเลียนแบบแปะที่ 3 ซึ่งไม่ต้องการการสนับสนุนในแอปพลิเคชันอื่นนอกเหนือจากแอปพลิเคชันต้องเข้าใจ ^ V เป็น litteral-next (สคริปต์นั้น จริงตอบคำถามนี้แม้ว่าอาจจะต้องปรับปรุงมันเป็นเพียง PoC)
Stéphane Chazelas

@ StéphaneChazelasรู้สึกอิสระที่จะแก้ไข / ปรับปรุงโพสต์ของฉัน :) "แอปพลิเคชันจำเป็นต้องเข้าใจ^Vเหมือนliteral-nextกัน แต่การ^Vเข้าสู่สตรีมของแอปพลิเคชันเป็นอย่างไร
Otheus

มันจะได้รับหากอุปกรณ์ tty ด้านในไม่ได้อยู่ในโหมด icanon (เช่นbashพรอมต์ของ readline จะเห็นมัน (และจะถือว่าเป็นตัวอักษรต่อไป)) หากอยู่ในโหมด icanon วินัยการใช้บรรทัดของอุปกรณ์ tty ภายในนั้นจะตัดออก (ตราบใดที่lnextตัวอักษรเป็น^V) เช่นเดียวกับเมื่อคุณพิมพ์ Ctrl-V X ด้วยตนเอง ..
Stéphane Chazelas

1
หากไม่ได้ใช้สคริปต์นั้นจะไม่มีสิ่งใดแทรก^Vเว้นแต่คุณจะใช้quoted pasteโหมดของ xterm (เปิดใช้งานโดยการส่ง\e[?2005h) นั่นperlสคริปต์สามารถนำไปปรับใช้เพื่อที่จะลบทั้งหมด แต่บรรทัดแรกในการวางหลายคู่สาย ( แต่ไม่น่าเชื่อถือสำหรับน้ำพริกขนาดใหญ่) แต่มันมีอยู่แล้วเพราะมันพูดขึ้นบรรทัดใหม่สำหรับ ReadLine (เช่นถ้าคุณได้กด Ctrl- V Ctrl-J) มันป้องกันไม่ให้บรรทัดถูกดำเนินการ (มันเพิ่งถูกเพิ่มไปยังบัฟเฟอร์การแก้ไขและคุณยังต้องกด Enter เพื่อดำเนินการ)
Stéphane Chazelas

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