47歳でやむなくセミリタイア

病気のためセミリタイアをすることに。現在は週20時間程度のバイトをしています。その他、雑多なことを記録として書いています。

vimのsyntax highlightを追加する方法

vimのsyntax highlightにキーワードなどを追加した時のメモです。

vimにはキーワードなどの色を変える(highlight)する機能があるのですが、それを使ってある文字列を目立たせくて、ちょっと変え方を調べたのでそのメモです。
SQL文の中のキーワードだったので、sqlのfiletypeを拡張する形にしました。また、デフォルトのsqlだと、mysqlのキーワードに対応していなかったものがあるので、それも追加しています。

デフォルトのsqlの後で読み込まれる設定を追加

~/.vim/after/syntaxの下にsyntaxファイルを置くと、デフォルトのものに追加して読み込まれるようになります。今回はsql.vimを追加します。

$ mkdir -p .vim/after/syntax
$ vi ~/.vim/after/syntax/sql.vim

syntaxファイルの中身

sql.vimの内容はこんな感じ。sqlTypeにmysqlのタイプを追加したり、sqlStatementにSQL文のキーワードを追加しています。
txtValue という新しいクラスを定義して、目立たせたいキーワードを正規表現で記載しています。

syn keyword sqlType  tinyint int text datetime
" syn keyword sqlOperator
syn keyword sqlStatement primary key
syn match sqlComment "#.*$" contains=sqlTodo,@Spell

syn region sqlString    matchgroup=Quote start=+"+  skip=+\\\\\|\\"+  end=+"+ contains=txtValue
syn region sqlString    matchgroup=Quote start=+'+  skip=+\\\\\|\\'+  end=+'+ contains=txtValue

syn match txtValue /%\$V\d\d\d\d%/
hi def link txtValue Identifier

/usr/share/vim/vim80/syntax (Ubuntuの場合)にデフォルトのsyntaxの定義ファイルがありますので、そちらを参考にするとよいです。

サフィックスがtxtのファイルはsqlのsyntaxを使うようにする

ついでに、~.vimrcに以下を追加して、*.txtをvimで開くとsqlのsyntax highlightを使って表示するようにします。

au BufRead,BufNewFile *.txt set filetype=sql

わかってみると簡単だけど、やり方を調べるのに結構時間がかかりました。