วิธีการแทนที่บัฟเฟอร์หน้าจอเป็นกลุ่มด้วยกิจกรรมทุบตีก่อนหน้าหลังจากออกจาก?


14

ฉันพยายามค้นหาว่าคุณสมบัติทุบตี (หรือเป็นกลุ่ม) คืออะไร นี่คือสถานการณ์ ฉันอยู่ใน bash terminal จากนั้นแก้ไขบางสิ่งด้วย vim จากนั้นกลับสู่ bash ในบางเทอร์มินัลหน้าจอเซสชัน vim จะหายไปเพื่อแสดงกิจกรรม bash shell ก่อนหน้า (นี่คือสิ่งที่ฉันต้องการ?)

ในอื่น ๆ บัฟเฟอร์หน้าจอเซสชัน vim ยังคงอยู่ (ซ่อนกิจกรรมเชลล์ bash เก่า) ฉันจะต้องล้างหน้าจอหรือรอจนกว่ากิจกรรมทุบตีของฉันจะผลักบัฟเฟอร์เซสชันที่เป็นกลุ่มออกจากหน้าจอ

ฉันจะควบคุมพฤติกรรมนี้เพื่อแทนที่ vim session buffer ด้วยกิจกรรม bash ก่อนหน้าได้อย่างไร

ขอบคุณทิม


superuser.com/questions/871170มีความเกี่ยวข้อง
JdeBP

คำตอบ:


10

เป็นกลุ่มส่งt_tiและt_ksไปยังสถานีเมื่อเซสชั่นเริ่มต้นและt_teและt_keเมื่อมันสิ้นสุด กระบวนการt_tiและt_teลำดับทำให้เทอร์มินัลสลับไปที่หน้าจอทางเลือก

ใน~/.vimrcไฟล์ของคุณคุณสามารถvimปล่อยให้เอกสารบนหน้าจอเมื่อออกโดยรวมบรรทัดนี้:

set t_ti=""

vimถ้าคุณมีเส้นคล้ายกับว่าเอามันควรจะทำให้เนื้อหาขั้วก่อนหน้านี้ปรากฏขึ้นเมื่อคุณออก


4

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

ไม่แน่ใจว่าเฉพาะหน้าจอหรือคำสั่งผสมหน้าจอ / vim ใน Ubuntu 15.10 สาเหตุเดียวกับที่อธิบายข้างต้นฉันเดาว่าscreenมี termcap ที่แตกต่างกัน


2
การเพิ่มaltscreen onลงในไฟล์ ~ / .screenrc แก้ปัญหาสำหรับหน้าจอ
BartBiczBoży

3

เพียงเพิ่มบรรทัดลงใน~/.bash_profileไฟล์ของคุณเพื่อส่งออกข้อกำหนดเป็น xterm ทุกครั้งที่คุณลงชื่อเข้าใช้ ทำดังนี้

echo "TERM=xterm; export TERM" >> ~/.bash_profile

ตอนนี้ครั้งต่อไปที่คุณเข้าสู่ระบบปัญหาของคุณจะได้รับการแก้ไขและถ้าคุณไม่ต้องการเข้าสู่ระบบอีกครั้งคุณสามารถทำอย่างใดอย่างหนึ่ง ...

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile

1
จะไม่เป็นอย่างนั้นexport $TERMหรือ
chrsblck

1
@chrsblck: ไม่เพราะexportส่งออกชื่อ (เช่นTERMในกรณีนี้) เป็นตัวแปรสภาพแวดล้อมแทนที่จะเป็นตัวแปรท้องถิ่น หากคุณใช้export $TERMในตัวอย่างนี้$TERMvar จะแก้ไขให้xtermคุณคุณจะตั้ง env var $xtermซึ่งอาจไม่ได้กำหนดไว้ แต่คำถามที่ดีมันก็ดูผิดสำหรับฉันเช่นกัน
ekerner

2

ทิม คำตอบทั้งสองข้างต้นนั้นถูกต้อง Vim เปลี่ยนเทอร์มินัลเป็น "หน้าจอทางเลือก" หากความสามารถในการทำเช่นนั้นถูกกำหนดไว้ในรายการ termcap สำหรับ $ TERM

คุณพูดว่า "ในเทอร์มินัลบางตัว (... มันใช้งานได้ดี ... )" และ "ในเทอร์มินัลอื่น (... มันทำงานผิดปกติ ... )"

คุณใช้เทอร์มินัลอีมูเลเตอร์ตัวเดียวกันสำหรับเทอร์มินัลทั้งหมดหรือไม่?

ตัวอย่างเช่นในกล่องลินุกซ์ที่บ้านของฉันฉันมี gnome-terminal, xterm, Konsole, yakuake และอาจจะอีกสองสามอย่างที่ฉันลืมไปพร้อมกับ "เทอร์มินัลเสมือน" ที่เกี่ยวข้องกับ ctrl-alt-F1 ... ctrl-alt-F6 หรือมากกว่านั้น สิ่งเหล่านี้ส่วนใหญ่สามารถทำงานกับรายการ termcap "มาตรฐาน" สำหรับ "xterm" - ยกเว้นเทอร์มินัลเสมือนที่มีนิยามเทอร์มินัลชื่อ "linux"

ตรวจสอบเทอร์มินัลอีมูเลเตอร์และมูลค่า $ TERM ในเทอร์มินัลที่ใช้งานได้และของที่ไม่มีเพื่อดูว่ามีอะไรแตกต่างกัน นอกจากนี้หากคุณลงชื่อเข้าใช้ด้วยชื่อผู้ใช้อื่นในบางครั้งนั่นอาจเป็นหัวใจของปัญหา - เนื่องจากผู้ใช้แต่ละคนมี. bashrc ของตนเองการตั้งค่าต่างๆอาจแตกต่างกันไปตามผู้ใช้

หวังว่าจะช่วย!
-pbr


1

สิ่งนี้เกี่ยวข้องกับเทอร์มินัลและการตั้งค่าเครื่องของคุณเกี่ยวกับข้อมูลเทอร์มินัล โซลูชันพกพาตัวหนึ่งคือใช้หน้าจอ GNU เปิดหน้าต่างหนึ่งสำหรับ Vim และอีกหน้าต่างสำหรับ Bash ดังนั้นจึงแยกทั้งสองเซสชัน หากคุณใช้เทอร์มินัลกราฟิกเช่น xterm บน X11, Gnome Terminal บน Gnome หรือ Terminal.app บน OS X คุณสามารถเปิดหน้าต่างหรือแท็บใหม่เพื่อให้ได้ผลเช่นเดียวกัน

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