วิธีการรับเป็นกลุ่มเพื่อทำงานกับ tmux อย่างถูกต้อง?


19

ฉันกำลังพยายามหาวิธีvimและtmuxเล่นด้วยกัน

ปัญหาของฉันคือเมื่อฉันใช้xterm-256colorฉันvimจะทำงานได้ดี แต่พื้นหลังไม่สามารถแสดงได้อย่างถูกต้อง

screen-256colorฉันคงนี้โดยใช้ สิ่งนี้ดูดี แต่จะแตกออกCtrl + arrow keys(พวกเขาเข้าสู่โหมดแทรกและลบ 4 บรรทัด) vimฉันต้องการใช้แมปเหล่านี้แทนเพื่อสลับแท็บใน

ฉันจะทำให้เรื่องนี้ทำงานได้อย่างไร

คำตอบ:


8

เรียกใช้catภายในtmuxและกดปุ่มที่มีปัญหาเพื่อค้นหารหัสหลบหนีที่พวกเขาสร้างขึ้น สำหรับผมนี้จะช่วยให้และ^[[D ^[[Cจากนั้นเพียงจับคู่รหัสการหลบหนีเหล่านั้นโดยตรง

nnoremap ^[[D gT
nnoremap ^[[C gt

โดยที่ the ^[คืออักขระ escape ที่คุณสามารถแทรกได้โดยการกด<CTRL-v><ESC>เป็นกลุ่ม


แต่นั่นไม่ได้เปลี่ยนพฤติกรรมของเสียงเรียกเข้าของฉัน
outsmartin

มีอะไรพิมพ์เมื่อคุณเริ่ม cat ภายใน tmux และกดปุ่ม?
มิกะฟิสเชอร์

^ [[1; 5C และ ^ [[1; 5D เป็นความคิดที่ดีฉันไม่รู้วิธีรับสิ่งเหล่านั้น แค่ลองดู มันได้ผล! ขอขอบคุณ.
outsmartin

ยิ่งใหญ่ ฉันแก้ไขท่อระบายน้ำของฉันเพื่อรวมวิธีการรับรหัสการหลบหนีที่ถูกต้อง
Mika Fischer

22

มีการกำหนดค่าหลายระดับที่ต้องตั้งค่าอย่างถูกต้องเพื่อการใช้งานที่ดีที่สุด

  1. กำหนดค่าtmuxเพื่อให้จดจำลำดับ ก่อนเรียกใช้tmuxให้ตั้งค่า TERM ที่เหมาะสมสำหรับเทอร์มินัลอีมูเลเตอร์ของคุณ (เช่นxterm-256color) รายการฐานข้อมูล terminfo ที่ระบุโดยตัวแปรสภาพแวดล้อมคำบอกtmuxวิธีการรับรู้ลำดับสำหรับการปรับเปลี่ยนปุ่มลูกศร (ความสามารถในการที่ผู้ใช้กำหนด { kUP, kDN, kRIT, kLFT} { 3.. 7})
  2. กำหนดค่าtmuxเพื่อสร้างลำดับ ตั้งค่าxterm-keysตัวเลือกเซสชันเป็นonเพื่อให้tmuxสร้างลำดับ xterm-style ของตัวเองเมื่อได้รับลำดับที่ TERM ระบุ ใน~/.tmux.conf:

    set-option -g xterm-keys on
    
  3. กำหนดคอนฟิกโปรแกรมที่รันภายในtmuxเพื่อใช้ / คาดหวังว่าส่วนใหญ่ของซีเควนซ์นั้น ตรวจสอบให้แน่ใจว่าคุณใช้คำที่เป็นพื้นฐานscreenอยู่ภายในtmux (เช่นscreen-256color) นี้จะบอกโปรแกรมที่กำลังทำงานอยู่ภายในtmuxวิธีการควบคุมtmux ‘s ขั้ว (อีกครั้ง) การจำลองและการตอบสนองสิ่งที่พวกเขาควรจะคาดหวังจากtmux
  4. น่าเสียดายที่screenรายการฐานข้อมูล terminfo ที่ใช้งานมักจะไม่ได้กำหนดลำดับใด ๆ สำหรับปุ่มลูกศรที่แก้ไข (เช่นอาจไม่มีkUPและอื่น ๆ ) ดังนั้นโปรแกรมที่ทำงานภายในtmuxอาจไม่ทราบว่าจะมีการเรียงลำดับดังกล่าว คุณจะต้องกำหนดค่าโปรแกรมใด ๆ ที่คุณต้องการจดจำคีย์เหล่านี้ด้วยตนเอง ในกลุ่มคุณสามารถใส่สิ่งนี้ใน~/.vimrc:

    if &term =~ '^screen'
        " tmux will send xterm-style keys when xterm-keys is on
        execute "set <xUp>=\e[1;*A"
        execute "set <xDown>=\e[1;*B"
        execute "set <xRight>=\e[1;*C"
        execute "set <xLeft>=\e[1;*D"
    endif
    

    คุณอาจต้องการใช้ตัวแปรที่ไม่มีx(เช่น<Up>แทน<xUp>และอื่น ๆ ) หากคุณพบว่าการใช้x-variant จะทำให้ปุ่มลูกศรปกติของคุณหยุดทำงาน

    ข้อดีของการกำหนดคีย์เช่นนี้คือคุณไม่จำเป็นต้องแมปชุดค่าผสมแต่ละตัวแยกกัน (Shift, Control, Contol + Shift, Meta, Meta + Shift, Meta + Control, Meta + Control + Shift); *ได้รับการแปลความหมายพิเศษในการจัดการทุกลำดับที่เกี่ยวข้อง (ดู:help xterm-modifier-keys)

  5. จากนั้นคุณสามารถแมปคีย์แทนลำดับที่เข้ารหัสยาก:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    

1
เฮ้นี่มันทำงานได้อย่างสมบูรณ์แบบ!
Pablo Olmos de Aguilera C.

2

ตามที่อธิบายไว้ที่นี่ปิดการใช้งานลบสีพื้นหลัง (BCE) โดยการล้างt_utตัวเลือกเทอร์มินัล (เรียกใช้:set t_ut=ใน Vim แล้วกดControl+ Lเพื่อรีเฟรชจอแสดงผลของเครื่องเทอร์มินัล) เพื่อให้โครงร่างสีทำงานอย่างถูกต้อง

ด้วยวิธีนี้คุณสามารถรักษาTERMค่าของคุณxterm-256colorสำหรับการตรวจจับคีย์ที่เหมาะสมในขณะที่ยังได้รับชุดรูปแบบสี Vim ที่เหมาะสมเช่นกัน! :-)


1

การตั้งค่าset t_Co=256ใน ~ / .vimrc ช่วยได้ไหม? นี่เป็นเพียงการตั้งค่าสี แต่อาจช่วยแก้ไขปัญหาบางอย่างได้

คุณสามารถแมปctrl+Arrowกุญแจใน ~ / .vimrc ของคุณได้เช่นกัน ...

แก้ไข: คุณลองctrl+Arrowในหน้าจอ GNU หรือไม่ ฉันคิดว่านี่อาจเป็นปัญหาของคุณ


มันดูและทำงานได้ดีในหน้าจอด้วย xterm-256color
outsmartin

set t_Co = 256 เสร็จแล้วเช่นกัน
outsmartin

มีสิ่งใดบ้างที่ช่วยได้บ้าง
Sardathrion - Reinstate Monica

น่าเสียดายที่ไม่มี คุณหมายถึงอะไรกับ remapign ctrl + arrow ฉันใช้พวกเขาแล้วแมปใหม่เพื่อสลับแท็บในกลุ่ม
outsmartin

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