こんにちは、河野です。
これは、 TECHSCORE Advent Calendar 2016 TECHSCORE BLOG の5日目の記事です。
私は普段はVimを使用してコーディングしたり、この記事も書いたりしています。
たまに、ファイルを二重に開いた時や、/etc配下の権限がないファイルを開いた時、
読み取り専用であることに気づかずにそのまま編集を進めてしまうことがあります。
ステータスラインに読み取り専用かどうか表示されているのですが、なかなか気づきにくいです。
カラースキーマを変えることができれば、ぱっと見わかりやすいのでは?と思ったのでやってみました。
設定
vimrcに以下のように設定します。
1 2 3 4 5 6 7 |
function UpdateColorScheme() if &readonly && &buftype ==# "" colorscheme morning endif endfunction autocmd BufReadPost,BufEnter * call UpdateColorScheme() |
autocmdを使用して、ファイルを読み込んだ後に UpdateColorScheme
を呼び出します。
UpdateColorSchemeの中では、 readonly
, buftype
を確認してカラースキーマを決定しています。
通常は、gruvbox をDarkで使用していて、読み取り専用の場合には、morning になります。
buftype について
最初は、 readonly
だけをチェックしていたのですが、ヘルプを開いた際にもカラースキーマが変わってしまうので、 buftype
もチェックするようにしました。
(社内のVimmerに教えてもらいました。)
スクリーンショット
見た目は以下のようになります。
ぱっと見で「う、うわぁーーーー」って気づくので、すぐに対処することができるようになりました。
上手く動かない点
異なるタブや分割したウィンドウで読み取り専用のファイルを開いてしまうと、
アプリケーション全体の配色が変わってしまいます。
特定のファイルを表示しているウィンドウだけ配色が変えられると嬉しいのですが、できないようですね…。
おまけ:目が、目がぁ〜
Vim8
だとこんな設定もできます!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
let s:ticktock = 0 let s:timer = 0 function! s:Mega(...) execute 'colorscheme' (s:ticktock ? 'gruvbox' : 'morning') let s:ticktock = !s:ticktock endfunction function! s:Megaaaa() if &readonly && &buftype ==# '' && !s:timer let s:timer = timer_start(100, funcref('s:Mega'), {'repeat': -1}) endif endfunction autocmd BufReadPost,BufEnter * call s:Megaaaa() |
以上です。