รูปร่างเคอร์เซอร์ภายใต้ vim + tmux


14

ฉันจะมีรูปร่างเคอร์เซอร์ที่แตกต่างกันอย่างไรเมื่อใช้ vim ใน tmux ภายใต้ cygwin

โดยไม่ต้อง tmux บรรทัดเหล่านี้จะเพียงพอที่จะบรรลุสิ่งที่ฉันต้องการ:

let &t_SI = "\e[5 q"
let &t_EI = "\e[2 q"

แต่อย่างใด tmux ของฉันทำลายมัน - เคอร์เซอร์มีรูปร่างบล็อกไม่ว่าโหมด vim ของฉันจะเป็นยังไง

รายละเอียดของฉัน:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • VIM 7.4.726 (คอมไพล์ด้วย + เคอร์เซอร์)
  • โปรแกรมจำลองเทอร์มินัล: mintty 1.1.3
  • ใช้ใน Cygwin Terminal หรือ Cmder (ทั้งสองทาง, รูปร่างของเคอร์เซอร์จะทำงานโดยไม่มี TMUX)
  • echo $TERMให้ฉันscreen-256color(ใน TMUX และภายนอกเพราะฉันมีexport TERM=screen-256colorในของฉัน.bashrc
  • .tmux.conf ประกอบด้วย:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

สิ่งที่ฉันลองแล้วไม่ประสบความสำเร็จ:

  • export TERM=xterm
  • export TERM=vt100
  • "คลิกขวาบนแถบ> ตัวเลือก> ลักษณะ> เคอร์เซอร์" (เปลี่ยนเคอร์เซอร์อย่างถาวรโหมดเสียงเรียกเข้ายังคงไม่เปลี่ยน)

เป็นกลุ่มที่คอมไพล์ด้วยฟีเจอร์ '+ cursorshape' หรือไม่
Alex Kroll

ตรวจสอบการตั้งค่าเครื่อง และคำถามนี้ดูเหมือนsuperuser.com/questions/634326//
อเล็กซ์ Kroll

คุณใช้เทอร์มินัลอีมูเลเตอร์ใด? คุณลองอะไรเช่นlet &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1;BlinkingCursorEnabled=1\x7\<Esc>\\"และlet &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0;BlinkingCursorEnabled=0\x7\<Esc>\\"?
jjaderberg

@jjaderberg ลำดับการหลบหนีของ iTerm? ใช้งานได้เฉพาะกับ iTerm ด้วยข้อควรระวัง: iTerm Doc > iTerm2 รองรับรหัสการหลบหนีที่ไม่ได้มาตรฐานหลายอย่าง สิ่งเหล่านี้อาจทำงานไม่ถูกต้องใน tmux หรือหน้าจอและอาจมีผลกระทบที่ไม่รู้จักกับตัวจำลองเทอร์มินัลอื่น ๆ ดำเนินการต่อด้วยความระมัดระวัง
Alex Kroll

1
ฉันได้ตรวจสอบนุ่มอีกครั้งหนึ่งของฉันและทุกรุ่นจะเหมือนกันกับคุณ แต่ $ ลงทุนในตัวเลือก mintty เป็นxterm-256colorภายใน screen-256colortmux tmux มีเวอร์ชัน 1.9 (และของคุณคือ 1.9a) ฉันเปิดเป็นกลุ่มใน tmux vim -u NULL(-u NULL แปลว่าไม่มีการตั้งค่า) รูปร่างของเคอร์เซอร์คือบล็อกในโหมดใดก็ได้ แต่เมื่อฉันกำหนดt_SIและt_EIเปลี่ยนรูปร่างจากบล็อก (โหมดปกติ) ไปเป็นI(โหมดแทรก) ตามที่คาดไว้ คุณสามารถลองเรียกใช้ vim ด้วย. vimrc ที่ว่างเปล่าโดยไม่ใช้ colorchemes และปลั๊กอินได้หรือไม่?
Alex Kroll

คำตอบ:


11

ดูเหมือนว่าปัญหาคือ tmux จะไม่ส่งรหัสหลบหนีที่เปลี่ยนเคอร์เซอร์ของคุณไปยังเทอร์มินัลอีมูเลเตอร์ คุณต้องห่อรหัสการหลบหนีที่คุณต้องการในลำดับพิเศษที่บอก tmux ว่าควรส่งผ่านไปยังเทอร์มินัลด้านนอก

ลำดับที่คุณต้องใช้ในการลำดับ escape คือ\<Esc>Ptmux;\<Esc> ... \<Esc>\\( ที่มา ) นี่...คือลำดับการหลบหนีของคุณ

ดังนั้นลองทำสิ่งนี้ในของคุณ.vimrc:

if exists('$TMUX')
    let &t_SI = "\<Esc>Ptmux;\<Esc>\e[5 q\<Esc>\\"
    let &t_EI = "\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
else
    let &t_SI = "\e[5 q"
    let &t_EI = "\e[2 q"
endif

ฉันไม่ได้ใช้โปรแกรมจำลองเทอร์มินัลหรือ cygwin ดังนั้นฉันจึงไม่สามารถทดสอบรหัสนี้ได้ แต่วิธีการทำงานสำหรับฉัน (ฉันเพิ่งห่อรหัสการหลบหนีอื่น ๆ ที่เหมาะกับสถานีของฉัน)


นี้จะดียิ่งขึ้น - .bashrcทำงานได้โดยไม่ต้องเปลี่ยนของฉัน ขอขอบคุณ.
Kossak

3

ค่าที่ถูกต้องของ$TERMตัวแปรสภาพแวดล้อมมีความสำคัญมาก screen-256colorตรวจสอบให้แน่ใจว่ามันจะแตกต่างจาก ตั้งเป็นxterm-256colorตัวอย่าง

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