แก้ไข CTRL- * เป็นกลุ่มภายใต้หน้าจอ GNU


10

เมื่อเรียกใช้เป็นกลุ่มภายใต้หน้าจอ GNU ฉันพบว่าการรวมกันของCTRLปุ่มลูกศรและ Pg * ไม่ทำงานอย่างที่คาดไว้

ฉันใช้vim-gnomeแพ็คเกจUbuntu 10.10

บนเครื่องที่แตกต่างกันยังใช้ Ubuntu สิ่งนี้ทำงานได้โดยไม่มีปัญหา โชคไม่ดีที่ตอนนี้ฉันยังไม่มีการกำหนดค่า

มีคำถามที่เกี่ยวข้องที่นี่: วิธีการแก้ไข Ctrl + ลูกศรในกลุ่ม?

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

นอกจากนี้ยังมีเธรดในรายชื่อผู้รับจดหมายบนหน้าจอ gnu ซึ่งแสดงว่าการเรียกใช้ vim ผ่าน$ TERM=xterm vimเป็นการแก้ไขที่เหมาะสมหรือวิธีแก้ไขปัญหา ใช้งานได้ แต่ฉันกังวลเล็กน้อยว่าอาจมีผลข้างเคียง มันไม่ได้ฟังดูคุ้นหูพอที่จะเป็นวิธีแก้ปัญหาที่ฉันติดตั้งบนเครื่องอื่น (ถ้าจำเป็นต้องมีวิธีแก้ไข)


+1 - ฉันมีปัญหาเดียวกันและ - ตามที่คุณแนะนำ - การเพิ่มไฟล์term xtermของฉัน~/.screenrcแก้ไขให้ฉันด้วย ขอบคุณอีกครั้ง!
Justin Ethier

คำตอบ:


4

ในฐานะที่เป็นสังหรณ์ที่ระบุไว้ในการปรับปรุงของเขาเพิ่มterm xtermไปยัง~/.screenrcไฟล์ที่ดูเหมือนว่าจะแก้ไขปัญหานี้


ดี .. ใช่ แต่ฉันถือออกสำหรับการจัดเรียงของคำอธิบายบางอย่างว่าทำไมscreenไม่เพียง แต่เผยแพร่ตัวแปรสภาพแวดล้อมแทนการเอาชนะมันด้วย$TERM สันนิษฐานว่ามีสถานการณ์บางอย่างที่มันเป็นสิ่งสำคัญที่จะมี"screen" $TERM == screen
intuited

3
@intuited: เหตุผลที่ชุดหน้าจอTERM=screenคือแอปพลิเคชันที่ทำงานอยู่ภายในกำลังสื่อสารภายในหน้าจอเทอร์มินัล: ลำดับการควบคุมที่พวกเขาส่งและรับคือของหน้าจอไม่ใช่ของหน้าจอเทอร์มินัลอะไรก็ตาม เนื่องจากคุณสามารถแยกเซสชั่นหน้าจอและใส่กลับเข้าไปในเทอร์มินัลชนิดอื่นดังนั้นจึงจำเป็นต้องใช้เลเยอร์การเปลี่ยนทิศทางนี้
Gilles 'หยุดความชั่วร้าย'

@Gilles: ขอบคุณฉันสงสัยบางอย่างเช่นนั้น สิ่งที่ประเภทของปัญหาที่อาจเกิดขึ้นจากการตั้งค่าไปยังxterm?
intuited

1
ไม่มากเพราะ xterm และหน้าจอส่วนใหญ่เข้ากันได้ แต่แต่ละอันมีความสามารถบางอย่างที่อีกอันหนึ่งไม่สามารถทำได้และถ้าคุณโกหกแอปพลิเคชันพวกเขาอาจใช้ความสามารถที่ไม่ได้ผลจริง เปรียบเทียบการส่งออกของinfocmp screenและinfocmp xtermและลำดับหน้าจอหลบหนีกับลำดับ xterm หลบหนี ฉันไม่มีข้อเสนอ แอปพลิเคชั่นส่วนใหญ่จะไม่สนใจ
Gilles 'หยุดความชั่วร้าย'

2

มีอีกสองวิธีในการตั้งค่าเทอร์มินัลซึ่งทำงานในกระบวนการที่กำลังทำงานอยู่:

  • ในอินสแตนซ์ของหน้าจอที่กำลังรันการกด^A- :และการออกคำสั่งterm xtermจะทำให้หน้าจอที่เพิ่งเปิดใหม่ภายใต้อินสแตนซ์นั้นเริ่มต้นด้วย$TERMตัวแปรสภาพแวดล้อมที่ตั้งไว้เป็นxterm; สิ่งนี้จะแพร่กระจายไปยังvimอินสแตนซ์ที่เรียกใช้ อินสแตนซ์ที่เป็นกลุ่มเหล่านี้จะแสดงพฤติกรรมที่เหมาะสมเกี่ยวกับคอมโบ CTRL; ฉันยังไม่ได้ค้นพบผลข้างเคียงของกลยุทธ์นี้ คำสั่งนี้ไม่มีผลกับหน้าจอที่มีอยู่ แน่นอนว่าคำสั่งนี้สามารถใช้ใน~/.screenrcไฟล์ได้ดังนั้นจึงเป็นไปได้ว่าวิธีนี้ใช้กับเครื่องอื่น

  • ในอินสแตนซ์ที่เรียกใช้คำสั่งset term=xtermจะทำให้ CTRL-combos ทำงานในอินสแตนซ์ vim นั้น สิ่งนี้มีผลข้างเคียงของการตัดการเชื่อมต่อคลิปบอร์ด X (เช่น@*และ@+) ด้วยเหตุผลที่ฉันยังไม่เข้าใจ ที่น่าสนใจผลข้างเคียงคลิปบอร์ดยังเกิดขึ้นเมื่อคำสั่งจะถูกดำเนินการในกรณีที่เป็นกลุ่มเริ่มต้นด้วย:set term=screen$TERM=xterm


คำตอบนี้นำมาจากการอัปเดตของ OP สิ่งที่ฉันทำก็คือการฟอร์แมตใหม่
phunehehe

2

ปัญหาพื้นฐานคือการทำแผนที่โดยscreenระหว่างเทอร์มินัลจริง (ระบุโดยTERMตัวแปรสภาพแวดล้อมภายนอกscreen) และการจำลองภายในscreenไม่สมบูรณ์

หากคุณเกิดขึ้นในการทดสอบ (ใช้vttestหรือตะปู ), คุณอาจสังเกตเห็นข้อบกพร่องสำหรับ

  • สี
  • กุญแจพิเศษ

ความพยายามที่จะแก้ไขปัญหาเหล่านี้โดยการตั้งค่าtermใน.screenrcมีข้อเสียเปรียบที่ว่ามันทำงานเฉพาะสำหรับการให้เกิดขึ้นจริงขั้วและไม่ได้พกพาไปใช้งานสถานีอื่น ๆ เอกสารบันทึก

การใช้คำสั่ง term ไม่ได้รับการสนับสนุนเพื่อจุดประสงค์ที่ไม่ใช่ค่าเริ่มต้น

มีวิธีแก้ไขปัญหาอื่น (ที่มีข้อเสียเปรียบที่แตกต่างกัน) โดยใช้คุณสมบัตินี้จากscreen เอกสาร :

เมื่อหน้าจอพยายามคิดชื่อเทอร์มินัลสำหรับตัวเองอันดับแรกจะค้นหารายการที่มีชื่อหน้าจอ term , โดยที่termเป็นเนื้อหาของ$TERMตัวแปรของคุณ หากไม่มีรายการดังกล่าวอยู่หน้าจอจะพยายามscreen(หรือscreen-wถ้าเทอร์มินัลนั้นมีความกว้าง (132 cols ขึ้นไป)) หากไม่พบรายการvt100นี้จะใช้เป็นตัวทดแทน

ncurses จัดเตรียมคำอธิบายเทอร์มินัลสำรองที่มีประโยชน์หลายอย่างสำหรับกรณีนี้เช่นscreen.xterm-newเพื่อซ่อมแซมปัญหาในการแม็พของหน้าจอ ในทางปฏิบัติฉันใช้TERM=xterm-newและเมื่อใช้งานหน้าจอจะได้รับการแมปปุ่มฟังก์ชั่นที่ใช้งานได้

อ้างอิงการtermตั้งค่าของหน้าจอในการทดสอบคุณอาจสังเกตเห็นว่ายังคงมีปัญหากับการทำแผนที่ซึ่งจะระบุไว้ในทางเลือกเหล่านี้ ถ้ามันเป็นไปได้ที่จะได้รับรายละเอียดที่ถูกต้องโดยใช้ขั้วทางเลือกเหล่านี้จะเป็นนามแฝงง่ายต่อการterm screenพวกเขาจะไม่.

ncurses ไม่ได้ให้บริการscreen.xterm(sic) เพราะ:

  • TERM=xtermถูกนำไปใช้ในวงกว้างสำหรับเทอร์มินัลอีมูเลเตอร์ซึ่งแตกต่างจาก xterm; การเพิ่มการจับคู่นี้จะทำให้สถานการณ์ยิ่งแย่ลงเท่านั้น (ดูตัวอย่างทำไมไม่ใช้เพียงชุดคำว่า "xterm"ในคำถามที่พบบ่อย ncurses)
  • ชื่อสำรองscreen.xtermมีโอกาสน้อยที่จะติดตั้งบนระบบระยะไกล (ดูความคิดเห็นเปลี่ยนจากมิถุนายน 2015ในฐานข้อมูล terminal)

อย่างไรก็ตามโดยรวมแล้วการใช้ชื่อทางเลือกเป็นการปรับปรุงมากกว่าการใช้termในของคุณ.screenrc: มันแก้ปัญหาได้มากกว่าที่สร้างขึ้น ย้อนกลับเป็นจริงของการtermตั้งค่า

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