วิธีการรับ Shift + ลูกศรและ ctrl + ลูกศรทำงานใน Vim ใน tmux?


44

นี่คือทั้งหมดใน iTerm2 บน OS X

ฉันเคยมี

export TERM='xterm-256color'

.bashrcในของฉัน นี่หมายถึงความเป็นกลุ่มใน tmux ใช้ 256 สี

และเมื่อฉันเพิ่ม

set -g xterm-keys on

จากนั้นแป้นพิมพ์ลัดพร้อมตัวดัดแปลงจะทำงานได้ดีใน Vim คือ: shift+left/rightที่ฉันทำแผนที่เพื่อเปลี่ยนแท็บ Vim, ctrl+up/downที่ฉันทำแผนที่เพื่อย้ายบรรทัด ("ฟอง") และshift+left/rightที่ทำงานนอกกรอบเพื่อข้ามคำในโหมดบรรทัดคำสั่ง (เช่นเมื่อพิมพ์บางอย่าง:e foo bar baz)

อย่างไรก็ตามการตั้งค่านี้มีปัญหาที่ว่าสีพื้นหลังที่เป็นกลุ่มเดียวที่แสดงให้เห็นด้านหลังของข้อความดังกล่าวที่นี่

ดังนั้นฉันจึงลบ

export TERM='xterm-256color'

จากฉัน.bashrcและนำสิ่งนี้ไปไว้ใน.tmux.conf:

set -g default-terminal "screen-256color"

นั่นทำให้สีพื้นหลัง Vim คงที่ แต่แป้นพิมพ์ลัดแตก - สิ่งเหล่านี้ทำในสิ่งที่ไม่คาดคิด (เลื่อนเคอร์เซอร์ลบข้อความ) แทน

ด้วยการใช้ctrl+vการแทรกเอาต์พุต verbatim จากคีย์ผสม (ดังอธิบายไว้ที่นี่ ) ฉันสามารถแก้ไขได้:

map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>

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

คำตอบ:


68

คุณต้องตั้งค่าหน้าต่างtmuxxterm-keysเพื่อให้tmuxส่งคีย์เหล่านี้ไปยังเทอร์มินัล คุณอาจต้องการใส่ในของคุณ~/.tmux.conf:

set-window-option -g xterm-keys on

เป็นกลุ่มมักจะโดยอัตโนมัติตั้งค่าการจัดการของปุ่มเหล่านี้เมื่อเป็นคำที่xtermบางสิ่งบางอย่าง screen-256colorแต่มันข้ามนี้ตั้งแต่ระยะคือ คุณสามารถกำหนดค่าคีย์เหล่านี้ด้วยตนเองใน~/.vimrcแบบนี้:

if &term =~ '^screen'
    " tmux will send xterm-style keys when its xterm-keys option 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

อย่างน้อยคุณก็ไม่จำเป็นต้องแมปชุดค่าผสมต่างๆทั้งหมด


ขอขอบคุณ! นั่นดูดีกว่าสิ่งที่ฉันมีและฉันซาบซึ้งกับคำอธิบาย สิ่งหนึ่งที่แก้ไขโดยสิ่งที่ฉันมี แต่ไม่ใช่โดยสายของคุณคือลูกศรขึ้น / ลงไม่ทำงานในปลั๊กอิน Command-T ตามที่อธิบายไว้ที่นี่: superuser.com/questions/237751/ …ฉันเพิ่งเพิ่มmap <Esc>[B <Down>จากที่หนึ่ง ของคำตอบ ดูเหมือนว่าเหตุผลที่มีข้อสมมติฐานที่ไม่ดีบางประการที่เกิดขึ้นจากตัวปลั๊กอินเอง
Henrik N

เพียงเพื่อให้ชัดเจนโซลูชันของคุณและmap <Esc>[B <Down>จากเธรดอื่นนั้นหมายความว่าทุกอย่างทำงานได้ดี
Henrik N

@HenrikN คุณช่วยอธิบายอะไรได้map <Esc>[B <Down>บ้าง? ฉันไม่เห็นความแตกต่างใด ๆ โดยเพิ่มลงในไฟล์. vimrc ของฉัน
Francesco Boccardo

@Francesco Boccardo: หากคุณติดตามลิงก์ในความคิดเห็นก่อนหน้าของฉันและจากนั้นไปที่ลิงก์อีกครั้งจากที่นั่นคุณจะไปที่superuser.com/a/215181ซึ่งดูเหมือนว่าจะอธิบายในรายละเอียดที่ยอดเยี่ยม :)
Henrik N

@HenrikN ขอบคุณ ดังนั้นอาจเป็นปัญหาที่เกี่ยวข้องกับ OSX หรืออาจได้รับการแก้ไขใน 7 ปีนี้เนื่องจากการกดคำสั่ง (การควบคุม?) + r ไม่ทำให้แป้นลูกศรในกลุ่ม vim ใน tmux สำหรับฉัน (ฉันอยู่บน Linux)
Francesco Boccardo

8

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

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


1
สวย! งานนักสืบที่ยอดเยี่ยม
Henrik N

2
นี่คือสิ่งที่ฉันเปลี่ยนไปอย่างแน่นอน: github.com/henrik/dotfiles/commit/ ......สีและปุ่มตัวปรับเปลี่ยนดูเหมือนจะทำงานได้ดีทั้งภายนอกและภายใน tmux
Henrik N
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.