为 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
脚本会立即退出。
如果大家有更好的解决办法,欢迎在这里分享。谢谢
我想将 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
脚本会立即退出。
如果大家有更好的解决办法,欢迎在这里分享。谢谢