5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vim2Advent Calendar 2019

Day 20

syntax/colorsのafterに差分の独自ハイライトを追加する

Last updated at Posted at 2019-12-20

はじめに

既存のcolorschemeやsyntaxに差分のカスタマイズ設定を追加する方法を紹介します。

afterについて

Vimで読み込まれる設定ファイルはruntimepathにより設定されており、afterは設定の追加読み込み用途として末尾に設定されています。

Windowsの場合
(略),$VIM/vimfiles/after,$HOME/vimfiles/after

独自ハイライトを追加するために、今回はこのafterディレクトリに差分のsyntaxやcolorschemeを置いて対応してみます。

afterに置くcolorschemeについて

追加用のcolorschemeはafter/colors/ディレクトリに配置するのですが、オリジナルと同名のままではafter/colors/側だけが読み込まれオリジナルは読み込まれなくなってしまいます。
対策として、両者それぞれを読み込む独自コマンドをvimrcに追加します。

" vimrc
command! -nargs=1 ColorScheme call ColorScheme(<f-args>)
function! ColorScheme(scheme)
  execute 'colorscheme ' . a:scheme
  try
    execute 'colorscheme ' . a:scheme.'_after'
  catch
  endtry
endfunction

これで準備完了です。
追加用をafter/colors/に配置する際は、ファイル名をオリジナル名+_afterへリネームします。

真/偽を強調するハイライト

例として、Go言語にて真/偽を強調する為のハイライトをdesert colorscheme用に作成してみます。

設定後は下記のような見た目になります。
hilight.png

ファイル構成

.vim/after
├── colors
│   └── desert_after.vim
└── syntax
    └── go.vim

各設定

" syntax/go.vim
syn keyword goNo false
syn keyword goYes true

syn match goNo /!=\?/ containedin=CONTAINED
syn match goYes /==\|!!/ containedin=CONTAINED
syn match goNoWrong /!==\|!!!/ containedin=CONTAINED
syn match goYesWrong /===/ containedin=CONTAINED

hi link goNo No
hi link goYes Yes
hi link goNoWrong Error
hi link goYesWrong Error
" colors/desert_after.vim
hi No guifg=#ff7777 guibg=#773838
hi Yes guifg=#9999ff guibg=#383888

あとはcolorscheme変更の際はColorSchemeコマンドを利用すればOKです。

まとめ

colorschemeは気に入ってるが少しカスタマイズしたい、て時に新たにcolorschemeを作るのは少々大げさになってしまいます。
本記事はcolorschemeもafterディレクトリへの差分設定だけで済ませる方法の紹介でした。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?