2

我正在使用现代 fortran 进行并行编程。我正在使用 vim,fortran.vim 语法文件似乎无法处理像 !$omp 或 !dir$ 这样的编译器指令,这让我非常恼火。这些只是在 vim 中呈现为注释,因此它们不会突出。在 c/c++ 中,这些编译器指令是使用#pragma's 完成的,所以一切都像预处理器代码而不是注释代码一样突出。所以我想在我的 fortran 语法中进行类似的处理。这是我要着色的多行指令的示例:

!$omp parallel do reduction(+: sum0) reduction(+: sum1) &
     private( nn, S1, S2, Y1, Y2, rvec0, rvec1, iThreadNum)

到目前为止,我有一个位于 $HOME/.vim/after/syntax 中的新 fortran.vim 文件。我已经得到它来识别行开头的'!$ omp'并为该行着色并正确着色多行。我的语法文件包含以下内容:

syn region fortranDirective start=/!$omp.*/ end=/[^\&]$/
hi def link fortranDirective PreProc

我的问题是它现在不能处理只有一行的简单情况。IE:

!$omp parallel do blah blah
call foobar   <-- this is coloured the same as the line above

我的语法文件中需要某种正则表达式规则才能正确匹配单行和续行。有人可以帮忙吗?

4

1 回答 1

7

据我所知,问题在于您的开始正则表达式太贪婪了。

这应该有效:

syn region fortranDirective start=/!$omp.\{-}/ end=/[^\&]$/
于 2013-04-16T12:46:20.147 回答