現在行をハイライトする
環境を新しくして背景色とかが変わった影響で、現在行のハイライトが微妙な感じになった。治そうと思ってvimrcを見てたらコピペしたものが多すぎて、何がなんだかわからなくなってしまった。とりあえず現在行をハイライトする部分はわかったので、そこだけ何やってるのか解説したい。
コード片
" Highlighting set cursorline augroup cch autocmd! cch autocmd WinLeave * set nocursorline autocmd WinEnter,BufRead * set cursorline augroup END hi clear CursorLine hi CursorLine gui=underline highlight CursorLine ctermbg=white guibg=white
大体こんな感じ。
1行目:" Highlighting
コメント。 '"'を頭につけるとコメントになる。
2行目:set cursorline
現在カーソルがある行をハイライトする機能をオンにする。set numberとかすれば行数表示されるし、set nonumberとすれば行数表示されない。省略としてseも可能らしい。
3行目~7行目:augroup cch...augroup END
augroupはコマンドをグループ化するときに使うコマンド[2]。augroup ENDを終わりに書く約束。
augroup グループ名
4行目:autocmd! cch
このグループのautocmdを全削除する。init作業かな。ちなみにau!とも書ける。
5行目:autocmd WinLeave * set nocursorline
autocmdは、イベントドリブンで何かを行いたい時に使うコマンド。文法はこんな感じ。
:autocmd [group] {events} {file_pattern} [nested] {command}
※[]で囲われた部分は省略できるところ
WinLeaveはウィンドウを立ち去るときに発生するイベントなので、つまりこういうことになる。なお、ウィンドウを立ち去る時だけであって、コマンドラインウィンドウに入ったりした時には起こらないようだ?[2]
ウィンドウを去る時なら、いつでも、cursorlineをオフにする
6行目:autocmd WinEnter,BufRead * set cursorline
WinEnterはウィンドウに入るときに発生するイベント、BufReadはバッファを読むときに発生するイベントらしい。だから5行目と6行目を合わせることで、「カーソルが移動しても、カーソルがいるところだけがハイライトされる」という機能が実現できる。
8行目:hi clear CursorLine
hiはhighlightの省略形。"hi clear [group]"で、[group]のハイライトに関する色設定を削除してしまう[3]。CursorLineは、"cursorline"がオンになっている時の、カーソルがある行を指している。
cursorlineに関する色設定を削除している。
9行目:hi CursorLine gui=underline
guiはGUIで起動している時の属性を表している。underlineは下線。
10行目:highlight CursorLine ctermbg=white guibg=white
なぜかここだけhighlightだった。ctermbgはターミナルで起動している時の背景色。guibgはGUIで起動している時の背景色。whiteは現在使っているターミナルのANSIカラーから持ってくる。
まとめ
記事がごちゃっとしたが大体何をしたいかは分かった。万が一誤りがあった場合はコメントしていただけると嬉しいです。記述されたvimrcに関しては:helpすれば結構わかるなぁ。部屋の大掃除も大切だけどこういうのも大切ですね。
参考文献
- [1] vimでバイナリを表示し、値を変更したい - rderaログ
- [2] コマンドラインウィンドウの開閉時にWinLeave,WinEnterイベントが発生しない · Issue #135 · vim-jp/issues · GitHub
- [3] vimのcolorscheme - 備忘録 beta
あとは:helpとか