我想使用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插件。
~/.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
脚本将立即退出。
如果有人有更好的解决方案,请在这里分享。由于