为 pFUnit 测试框架扩展 vim Fortran 语法文件

Extending vim Fortran Syntax file for pFUnit testing framework

我想将 pFUnit Fortran 单元测试框架与 vim 一起使用。测试通常写在一个以 .pf 结尾的文件中,它们主要使用 Fortran 95 语法,除了它们具有单元测试特定关键字(如 @test@assertEqual

扩展 vim 中的 fortran 语法突出显示以仅在具有 .pf 扩展名的文件中标记这些特殊单词的最简单方法是什么?

谢谢

示例单元测试:

@test
subroutine test_to_lower_all_A()
    use pfunit_mod
    use mod_str_tools, only: to_lower
    @assertEqual("aaa", to_lower("AAA"))
end subroutine

好的,这似乎是解决问题的方法:

1) 在~/.vim/ftdetect/pFUnit.vim

中创建一个文件
" ftdetect/pFUnit.vim
au BufRead,BufNewFile *.pf setfiletype pFUnit

这会根据文件扩展名自动设置文件类型

2) 在~/.vim/ftplugin/pFUnit.vim

中创建一个文件
" ftplugin/pFUnit.vim
setlocal iskeyword+=@-@
let fortran_free_form=1
so $VIMRUNTIME/ftplugin/fortran.vim

这表示 @ 字符是关键字的一部分,而不是分隔符。 它还设置 fortran_free_form 标记并加载 fortran 插件。

3) 在 ~/.vim/syntax/pFUnit.vim

中创建一个文件
" Vim syntax file
" Language: pFUnit

if exists("b:current_syntax")
    finish
endif

syn keyword pFUnitTag @test @before @after @suite
syn keyword pFUnitAssert @assertTrue @assertFalse @assertAny @assertAll @assertNone @assertNotAll
syn keyword pFUnitAssert @assertEqual @assertLessThan @assertLessThanOrEqual @assertGreaterThan @assertGreaterThanOrEqual
syn keyword pFUnitAssert @assertRelativelyEqual
syn keyword pFUnitAssert @assertIsNaN @assertIsFinite @assertExceptionRaised @assertSameShape

hi def link pFUnitTag PreProc
hi def link pFUnitAssert Keyword

so $VIMRUNTIME/syntax/fortran.vim

let b:current_syntax = "pFUnit"

这现在既定义了新关键字,又提供了原始关键字 fortran.vim。在设置 b:current_syntax 之前获取该文件很重要,否则 fortran.vim 脚本会立即退出。

如果大家有更好的解决办法,欢迎在这里分享。谢谢