約 9 分で読めます。
ワタシ、本業は自動車業界で組込機器開発をやっています。
そのなかで、PRACTICEというベンダー(Lauterbach)固有言語を使ってテスト用スクリプトを書いたり読んだりすることが多いのですが、VIMだと開発サポート機能があまりないのが問題でした。
- シンタックスハイライトされない
- タグジャンプできない
まあこれはVIMではなくctagsの方ですが。
今まではVisual Studio CodeでPRACTICE言語用プラグインを入れてなんとかやっていましたが、何を思ったのか最近vimmerを目指そうと考え始め、前記2つならVIM用設定ファイルを書けば割と簡単にやれそうだったので、やってみました。
今回はそのお話です。
シンタックスハイライト
「VIM シンタックスハイライト 自作」でググると、基礎的な文法などを解説してくれているサイトがたくさん出てきます。
今回はこちらを参考にさせていただきました。ありがとうございます。
また、こちらの公式サイトも参考にしました。
文字列の中に差し込んだ変数をハイライトするときにcontainedを使った。
作ったファイルはこちら。
あまり複雑なことはやっていないので、すんなり読めると思います。
自分が作業する上で困らない程度に定義しています。
その他社内固有の機能などを入れていましたが、公開するにあたり削除しています。
網羅性は薄く、転用するときは利用者側で定義を追加したり修正したりが必要かもしれません。
" Vim syntax file " Language: PRATICE " Last Change: 2023 Dec 18 syntax match PracticeComment /\/\/.*/ highlight link PracticeComment Comment syntax match PracticeVariableInComment /&[a-zA-Z0-9_]*/ contained highlight link PracticeVariableInComment Identifier syntax match PracticeString /\".*\"/ contains=PracticeVariableInComment syntax match PracticeString /\'.*\'/ contains=PracticeVariableInComment highlight link PracticeString String syntax keyword PracticeType LOCAL syntax keyword PracticeType PRIVATE syntax keyword PracticeType ERROR syntax keyword PracticeType ENTRY highlight link PracticeType SpecialKey syntax keyword PracticeConditional IF syntax keyword PracticeConditional ELSE syntax keyword PracticeConditional WHILE syntax keyword PracticeConditional ON highlight link PracticeConditional Conditional syntax keyword PracticeStatement GOSUB syntax keyword PracticeStatement RETURN syntax keyword PracticeStatement GLOBALON syntax keyword PracticeStatement DO syntax keyword PracticeStatement ENDDO highlight link PracticeStatement Statement syntax match PracticeVariable /&[a-zA-Z0-9_]*/ highlight link PracticeVariable Identifier syntax match PracticeFunction /^[a-zA-Z0-9_]*:/ syntax keyword PracticeFunction TRUE syntax keyword PracticeFunction FALSE syntax keyword PracticeFunction WAIT syntax keyword PracticeFunction PRINT syntax keyword PracticeFunction PRINTF syntax keyword PracticeFunction SPRINTF syntax match PracticeFunction /OS\.[a-zA-Z0-9_]*/ syntax match PracticeFunction /FILE\.[a-zA-Z0-9_]*/ syntax match PracticeFunction /VAR\.[a-zA-Z0-9_]*/ syntax match PracticeFunction /STRING\.[a-zA-Z0-9_]*/ syntax match PracticeFunction /SYMBOL\.[a-zA-Z0-9_]*/ syntax match PracticeFunction /LOG\.[a-zA-Z0-9_]*/ highlight link PracticeFunction Function syntax keyword PracticeTrace32Function GO syntax match PracticeTrace32Function /BREAK\.[a-zA-Z0-9_]*/ highlight link PracticeTrace32Function Special let b:current_syntax = "PRACTICE"
こんなふうに表示できています。
対処前はすべて無色だったので、だいぶ見やすくなりました!
いまはこれで十分なので、今後は都度必要に応じて追加していきます。
ctags用オプションファイル
こちらも自分が困らない程度に定義しています。
変数と関数のみ。
適当な場所に.ctagsファイルとして保存。
今後、ジャンプしたいところがあれば都度追加します。
--langdef=PRACTICE --langmap=PRACTICE:.cmm --regex-PRACTICE=/^[ \t]*(LOCAL|PRIVATE)[ \t]+&([a-zA-Z0-9_]+)/\2/v,variable/i --regex-PRACTICE=/^([a-zA-Z0-9_]+):/\1/f,function/i
tagsファイルはこんなふうにして出しています。
普通の使い方です。
Set-Location <path_to_project_root> ctags.exe --options=<path_to_ctags> -R .
終わりに
いかがでしたか。
これでvimmerライフがはかどりますね!
Comments