Bentuk kursor di bawah vim + tmux

14

Bagaimana saya bisa memiliki bentuk kursor yang berbeda saat menjalankan vim di dalam tmux di bawah cygwin?

TANPA menyesuaikan garis-garis ini akan cukup untuk mencapai apa yang saya inginkan:

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

Tapi entah bagaimana tmux saya mematahkannya - kursor memiliki bentuk blok tidak peduli apa pun mode vim saya.

Spesifikasi saya:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726 (dikompilasi dengan + cursorshape)
  • terminal emulator: mintty 1.1.3
  • digunakan dalam Terminal Cygwin atau Cmder (baik cara, bentuk kursor hanya berfungsi tanpa TMUX)
  • echo $TERMmemberi saya screen-256color(dalam TMUX dan di luarnya, karena saya miliki export TERM=screen-256colordi saya.bashrc
  • .tmux.conf mengandung:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

Apa yang saya coba sudah tidak berhasil:

  • export TERM=xterm
  • export TERM=vt100
  • "klik kanan pada bar> Opsi> Tampak> Kursor" (ini mengubah kursor secara permanen, mode vim masih tidak mengubahnya)
Kossak
sumber
Vim dikompilasi dengan fitur '+ cursorshape'?
Alex Kroll
Periksa pengaturan terminal. Dan pertanyaan ini mirip superuser.com/questions/634326/…
Alex Kroll
Emulator terminal mana yang Anda gunakan? Sudahkah Anda mencoba sesuatu seperti let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1;BlinkingCursorEnabled=1\x7\<Esc>\\"dan let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0;BlinkingCursorEnabled=0\x7\<Esc>\\"?
jjaderberg
@jjaderberg urutan melarikan diri iTerm? Hanya berfungsi di iTerm dengan beberapa peringatan: iTerm Doc > iTerm2 mendukung beberapa kode pelarian non-standar. Ini mungkin tidak berfungsi dengan baik di tmux atau layar, dan mungkin memiliki efek yang tidak diketahui pada emulator terminal lainnya. Lanjutkan dengan hati hati.
Alex Kroll
1
Saya telah memeriksa perangkat lunak saya sekali lagi dan semua versi sama dengan versi Anda tetapi $ TERM dalam opsi mintty ada xterm-256colordi dalam tmux screen-256color. tmux memiliki versi 1.9 (dan Anda 1.9a). Saya telah meluncurkan vim di dalam tmux vim -u NULL(-u NULL berarti tanpa konfigurasi). Bentuk kursor adalah blok dalam mode apa pun, tetapi ketika saya menetapkan t_SIdan t_EImembentuk, beralih dari blok (mode normal) ke I(mode insert) seperti yang diharapkan. Bisakah Anda mencoba meluncurkan vim dengan .vimrc kosong, tanpa skema warna dan plugin?
Alex Kroll

Jawaban:

11

Tampaknya masalahnya adalah tmux tidak mengirim kode pelarian kursor Anda ke emulator terminal. Anda perlu membungkus kode pelarian yang Anda inginkan dalam urutan khusus yang memberitahu tmux bahwa kode itu harus meneruskannya ke terminal luar.

Urutan yang Anda butuhkan untuk membungkus urutan pelarian Anda adalah \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Sumber ). Ini ...adalah urutan pelarian Anda.

Jadi, coba lakukan sesuatu seperti ini di .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

Saya tidak menggunakan terminal emulator atau cygwin Anda, jadi saya tidak bisa menguji kode ini. Tetapi metode ini bekerja untuk saya (saya hanya membungkus kode pelarian lain yang sesuai dengan terminal saya).

avivr
sumber
Ini bahkan lebih baik - bekerja tanpa mengubah saya .bashrc. Terima kasih.
Kossak
3

Nilai $TERMvariabel lingkungan yang benar sangat penting. Pastikan berbeda screen-256color. Tetapkan ke xterm-256colormisalnya.

Alex Kroll
sumber