Hình dạng con trỏ dưới vim + tmux


14

Làm cách nào tôi có thể có các hình dạng con trỏ khác nhau khi chạy vim bên trong tmux dưới cygwin?

KHÔNG Tmux những dòng này sẽ đủ để đạt được những gì tôi muốn:

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

Nhưng bằng cách nào đó tmux của tôi phá vỡ nó - con trỏ có hình dạng khối bất kể tôi đang ở chế độ vim nào.

Thông số kỹ thuật của tôi:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726 (được biên dịch với + chữ thảo)
  • trình giả lập thiết bị đầu cuối: mintty 1.1.3
  • được sử dụng trong Cygwin Terminal hoặc Cmder (một trong hai cách, hình dạng con trỏ chỉ hoạt động mà không có TMUX)
  • echo $TERMmang lại cho tôi screen-256color(trong tmux và bên ngoài của nó, bởi vì tôi có export TERM=screen-256colortrong tôi.bashrc
  • .tmux.conf chứa đựng:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

Những gì tôi đã cố gắng mà không thành công:

  • export TERM=xterm
  • export TERM=vt100
  • "rightclick trên thanh> Tùy chọn> Trông> Con trỏ" (nó thay đổi con trỏ vĩnh viễn, chế độ vim vẫn không thay đổi nó)

Vim được biên dịch với tính năng '+ cursorshape'?
Alex Kroll

Kiểm tra cài đặt thiết bị đầu cuối. Và câu hỏi này có vẻ tương tự superuser.com/questions/634326/ Mạnh
Alex Kroll

Bạn đang sử dụng trình giả lập thiết bị đầu cuối nào? Bạn đã thử một cái gì đó như 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 Trình tự thoát của iTerm? Chỉ hoạt động trong iTerm với một số cảnh báo: iTerm Doc > iTerm2 hỗ trợ một số mã thoát không chuẩn. Chúng có thể không hoạt động chính xác trong tmux hoặc màn hình và có thể có các hiệu ứng không xác định trên các trình giả lập thiết bị đầu cuối khác. Tiến hành thận trọng.
Alex Kroll

1
Tôi đã kiểm tra phần mềm của mình thêm một lần nữa và tất cả các phiên bản đều giống với bản của bạn nhưng $ TERM trong các tùy chọn mintty nằm xterm-256colortrong tmux screen-256color. tmux có phiên bản 1.9 (và của bạn là 1.9a). Tôi đã khởi chạy vim bên trong tmux vim -u NULL(-u NULL có nghĩa là không có cấu hình). Hình dạng con trỏ là khối trong bất kỳ chế độ nào, nhưng khi tôi gán t_SIt_EIchuyển hình dạng từ khối (chế độ bình thường) sang I(chế độ chèn) như mong đợi. Bạn có thể thử khởi chạy vim với .vimrc trống, không có bất kỳ màu sắc và plugin nào không?
Alex Kroll

Câu trả lời:


11

Có vẻ như vấn đề là tmux không gửi mã thoát thay đổi con trỏ của bạn đến trình giả lập thiết bị đầu cuối. Bạn cần phải bọc các mã thoát mong muốn của mình theo một trình tự đặc biệt cho tmux biết rằng nó sẽ chuyển nó đến thiết bị đầu cuối bên ngoài.

Trình tự bạn cần để bọc trình tự thoát của bạn là \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Nguồn ). Các ...là dãy thoát của bạn.

Vì vậy, hãy thử làm một cái gì đó như thế này trong của bạn .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

Tôi không sử dụng trình giả lập thiết bị đầu cuối hoặc cygwin của bạn, vì vậy tôi không thể kiểm tra mã này. Nhưng phương pháp này hiệu quả với tôi (tôi chỉ gói các mã thoát khác phù hợp với thiết bị đầu cuối của mình).


Điều này thậm chí còn tốt hơn - hoạt động mà không thay đổi của tôi .bashrc. Cảm ơn bạn.
Kossak

3

Giá trị chính xác của $TERMbiến môi trường là rất quan trọng. Hãy chắc chắn rằng nó khác với screen-256color. Đặt nó làm xterm-256colorví dụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.