VIMでPRACTICE言語開発用設定ファイルを作った

VIM

約 9 分で読めます。



ワタシ、本業は自動車業界で組込機器開発をやっています。

そのなかで、PRACTICEというベンダー(Lauterbach)固有言語を使ってテスト用スクリプトを書いたり読んだりすることが多いのですが、VIMだと開発サポート機能があまりないのが問題でした。

  • シンタックスハイライトされない
  • タグジャンプできない
    まあこれはVIMではなくctagsの方ですが。



今まではVisual Studio CodeでPRACTICE言語用プラグインを入れてなんとかやっていましたが、何を思ったのか最近vimmerを目指そうと考え始め、前記2つならVIM用設定ファイルを書けば割と簡単にやれそうだったので、やってみました。
今回はそのお話です。

シンタックスハイライト

「VIM シンタックスハイライト 自作」でググると、基礎的な文法などを解説してくれているサイトがたくさん出てきます。
今回はこちらを参考にさせていただきました。ありがとうございます。

Vim – シンタックスハイライトの設定を自作して追加する方法
Vimではシンタックスハイライトの定義を自作することができます。シンタックスハイライトの定義を自作することで、サポート外のプログラミング言語やテキストファイルなどでもハイライトを表示することができます。 この記事では、Vimエディタのシンタ...



また、こちらの公式サイトも参考にしました。
 文字列の中に差し込んだ変数をハイライトするときにcontainedを使った。

usr_44 - Vim日本語ドキュメント



作ったファイルはこちら。
あまり複雑なことはやっていないので、すんなり読めると思います。
自分が作業する上で困らない程度に定義しています。
 その他社内固有の機能などを入れていましたが、公開するにあたり削除しています。
網羅性は薄く、転用するときは利用者側で定義を追加したり修正したりが必要かもしれません。

" 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

タイトルとURLをコピーしました