Vim normal dan masukkan kursor mode tidak berubah di layar GNU

9

Saya menggunakan vim dalam beberapa konteks yang berbeda; biasanya, saya suka meletakkan ini di .vimrc:

let &t_ti.="\<Esc>[1 q"
let &t_SI.="\<Esc>[5 q"
let &t_EI.="\<Esc>[1 q"
let &t_te.="\<Esc>[0 q"

Ini membuatnya sehingga mode insert dan normal menggunakan kursor berbeda (mode normal adalah kursor blok dan mode insert adalah garis vertikal). Ini berfungsi baik untuk saya dengan cygwin, xterm, dan juga rvxt. Namun, setiap kali saya menggunakan layar GNU, kursor saya tidak lagi berubah. Saya telah melihat referensi untuk memperbaiki ini untuk tmux (misalnya di sini: Bentuk kursor di bawah vim + tmux ), tetapi tidak ada yang saya coba untuk Layar yang berfungsi. Untuk saat ini, saya menggunakan ini di .vimrc:

"Underline currently edited line
if !has("gui_running")
    :autocmd InsertEnter * set cul
    :autocmd InsertLeave * set nocul
endif

Itu membuatnya sehingga ketika dalam mode insert garis saat ini digarisbawahi (yang :has("gui_running")mencegahnya mulai berlaku di gvim). Saya juga menggunakan set laststatus=2untuk menjaga status bar di bagian bawah, yang juga membantu. Saya hanya berharap itu bekerja lebih seperti gvim. Adakah yang menemukan perbaikan untuk ini?

ZeroG
sumber
Sepertinya saya tidak bisa memindahkannya sendiri di perwakilan n00b saya ( meta.stackexchange.com/questions/85017/... ), tapi saya benar-benar siap untuk itu dipindahkan (saya tidak menyadari ada saluran Vi; sorakan untuk itu!)
ZeroG

Jawaban:

4

Saya pikir saya sudah mengetahuinya, meskipun saya tidak sepenuhnya mengerti perbaikannya. Ini tampaknya berfungsi untuk mintty, xterm, dan rxvt:

" Set up vertical vs block cursor for insert/normal mode
if &term =~ "screen."
    let &t_ti.="\eP\e[1 q\e\\"
    let &t_SI.="\eP\e[5 q\e\\"
    let &t_EI.="\eP\e[1 q\e\\"
    let &t_te.="\eP\e[0 q\e\\"
else
    let &t_ti.="\<Esc>[1 q"
    let &t_SI.="\<Esc>[5 q"
    let &t_EI.="\<Esc>[1 q"
    let &t_te.="\<Esc>[0 q"
endif

Ini bersandar pada screenrc Anda memiliki sesuatu seperti "term screen" atau "term screen-256color" sehingga file vimrc dapat mengidentifikasi terminal mana Anda berada. Terminal yang tersisa hanya saya gunakan secara teratur di mana ini tidak berfungsi adalah Putty, tapi saya pikir itu benar-benar tidak mendukung perintah terminal untuk mengubah bentuk kursor. Mintty dicabut dari Putty beberapa waktu lalu, dan saya melihat di sini ( https://www.cygwin.com/ml/cygwin-announce/2009-07/msg00011.html ) bahwa dukungan DECSCUSR ditambahkan ke mintty setelah garpu itu.

Ini cukup baik bagi saya - jika saya ssh'ing ke dalam mesin di mana saya benar-benar ingin kursor blok saya di Vim, saya kira saya bisa cygwin / ssh atau PuTTY / XMing / rxvt jalan melalui itu alih-alih Putty.

ZeroG
sumber
2
Bagi saya, echo &termoutput screenjadi saya berubah regexp di baris mulai if &term ...untuk screen.*.
Kenny Evitt
1
@ KennyEvitt sama untuk saya di MacOS. Tangkapan yang bagus!
Ivan Temchenko