Posted at

mintty ターミナル上の vim で、モードに応じてカーソル形状を変える

More than 5 years have passed since last update.

(cygwin や mingw の)mintty ターミナル上の vim で、カーソル形状をモードによって次のように変えたい。


  • 通常はブロック型点滅カーソル

  • 挿入モード時はライン型点滅カーソル


vimrc の設定

vimrc に次を追加すればよい。

let &t_ti.="\e[1 q"

let &t_SI.="\e[5 q"
let &t_EI.="\e[1 q"
let &t_te.="\e[0 q"

(引用元 : http://code.google.com/p/mintty/wiki/Tips#Mode-dependent_cursor_in_vim

起動・終了時、モード切替時に、mintty の制御シーケンスを使ってカーソル形状を変えている。


参考:mintty の制御シーケンス

mintty でカーソル形状を変える制御シーケンスは以下のとおり。


  • ESC [ 0 SP q ⇒ mintty のデフォルト設定

  • ESC [ 1 SP q ⇒ ブロック型、点滅あり

  • ESC [ 2 SP q ⇒ ブロック型、点滅なし

  • ESC [ 3 SP q ⇒ 下線型、点滅あり

  • ESC [ 4 SP q ⇒ 下線型、点滅なし

  • ESC [ 5 SP q ⇒ ライン型、点滅あり

  • ESC [ 6 SP q ⇒ ライン型、点滅なし

(参照 : http://code.google.com/p/mintty/wiki/CtrlSeqs#Cursor_style

この制御シーケンスは、VT510 ベースに mintty 独自拡張を追加した感じらしい。


余談

ちなみに、制御シーケンスをテキストファイルに記述するときに、vim で C-v C-[ と入力して ESC コード(表示上は ^[ になる)を直接埋め込んでいるのをよく見かける。

でも、上記の設定で ESC コードを "\e" と書いているように、普通のテキスト文字だけで記述できることが多い。

個人的には、テキストファイルに制御コードを埋め込むのは好きではないので、テキスト文字で記述できるときはなるべくそうしている。