GNU画面でVimの通常モードと挿入モードのカーソルが変更されない


9

私はvimをいくつかの異なるコンテキストで使用しています。通常、私はこれを私の中に入れたい.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"

これにより、挿入モードと通常モードで異なるカーソルが使用されるようになります(通常モードはブロックカーソルであり、挿入モードは垂直線です)。これは、minttyでcygwin、xterm、およびrvxtを使用してうまく動作します。ただし、GNU画面を使用するたびに、カーソルが変化しなくなりました。これをtmuxで修正するための参照(たとえば、ここではvim + tmuxでのカーソルの形状)を見てきましたが、Screenで試したことは何もありません。今のところ、私はこれを私の中で使用してい.vimrcます:

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

これにより、挿入モードで現在の行に下線が引かれます(これ:has("gui_running")により、gvimで有効になりません)。またset laststatus=2、ステータスバーを下部に表示するためにも使用します。これも役立ちます。私はそれがgvimのようにもう少しうまくいくことを願っています。誰かがこれに対する修正を見つけましたか?


私は自分のn00b担当者(meta.stackexchange.com/questions/85017/…)で自分で移動することはできないようですが、移動することに完全に満足しています(Viチャネルがあることに気付いていませんでした。 that!)
ZeroG 2016

回答:


4

私はそれを理解したと思いますが、修正を完全には理解していません。これは、mintty、xterm、および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

これは、「term screen」や「term screen-256color」などのscreenrcに依存しているため、vimrcファイルは現在使用している端末を識別できます。これが機能しない場合に私が定期的に使用している唯一のターミナルはPuTTYですが、カーソルの形状を変更するターミナルコマンドは文字通りサポートされていないと思います。MinttyはPuTTYからしばらく前に分岐しましたが、ここ(https://www.cygwin.com/ml/cygwin-announce/2009-07/msg00011.html)では、分岐後にDECSCUSRサポートがminttyに追加されたことがわかりました。

これで十分です。Vimでブロックカーソルが本当に必要なマシンにsshを実行する場合は、PuTTYの代わりにcygwin / sshまたはPuTTY / XMing / rxvtを使用することができます。


2
私にとっては、echo &term出力screenIが始まる行に正規表現を変えそうif &term ...screen.*
ケニーエビット2016年

1
@KennyEvittはMacOSでも同じです。良いキャッチ!
Ivan Temchenko 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.