Vim突出显示FORTRAN中奇怪的部分

10

我正在使用VIM的molokai主题,不知道这是否有所不同。

最近我一直在学习FORTRAN,在使用VIM编写FORTRAN程序时,根据我的空格使用情况,会出现奇怪的颜色着色。

例如,如果我不缩进地进行制表符,会在单词的一部分上出现紫色高亮显示(有时它不在那里,注意PRINT和READ)。

without tabs

如果我将其制表符缩进,看起来正常:

with tabs

我是VIM的新手(更不用说FORTRAN了),所以我不知道发生了什么事情,我不介意一直使用制表符缩进,但我认为如果整个程序浪费该白色空间的列,这看起来有点荒谬。


你正在编辑的文件名是什么? - High Performance Mark
文件名为:temp.f90 - rusty
2
嗯,你的屏幕截图表明 Vim 可能认为代码是以固定格式源代码编写的,其中语句从第7列开始。另一个广泛使用的程序员编辑器通常假定带有 .f 扩展名的源文件是固定格式的,我怀疑 Vim 也可能是这样。也许它确实是这样,但我不知道如何告诉它不是这样的。 - High Performance Mark
更新:如果我保存并退出,重新打开文件后,紫色高亮将消失,颜色将正确显示。 - rusty
我认为你是对的,它没有检测到我正在使用现代格式,而是认为我在使用固定格式/卡片式,直到我重新打开文件。我会进一步调查,并希望很快发布答案。 - rusty
它之所以在您退出并重新打开时起作用,是因为在您首次创建文件时的默认行为是假定它是固定格式,并且您会得到疯狂的字符。当您重新打开文件时,它会正确地将文件解释为自由格式。修复方法在下面的@dwwork解决方案中。 - NuclearFission
3个回答

21

如果你搜索 :help fortran,你会得到一个可以设置的选项列表。 这些是我在自己的 .vimrc 文件中设置的fortran选项。(虽然我不使用固定格式的代码)我知道有一两个专门针对Fortran的脚本可以在线获取,但我并不使用它们。

let fortran_free_source=1
let fortran_have_tabs=1
let fortran_more_precise=1
let fortran_do_enddo=1

很有帮助,我需要更好地利用“help:”命令。目前我已经解决了我的问题,虽然我不必经常使用固定的东西,但在工作中偶尔会遇到。我的切换键对此非常有帮助。谢谢你的回答,非常感谢 :) 如果其他人问我,我会记住这个的。 - rusty
我计划明天尝试这个,而不是找到的语法文件,以便进行比较。该文件添加了一些东西,我发现与我的当前vimrc设置有些冲突。 - rusty
1
请确保您仔细阅读了帮助文档!fortran_free_source 假定所有的自由格式,fortran_have_tabs 防止其突出显示制表符,但是我稍后设置了expandtab选项,该选项将所有制表符转换为空格。文档还描述了一种设置特定文件扩展名为自由格式或固定格式的方法。另请参见help:ft-fortran-indent - dwwork
我刚刚将你的回答标记为答案,尽管它可能没有我在我的回答中指定的fortran.vim文件那么“完整”。结果更加清晰,因为我只需要正确的语法高亮和更简单的缩进(以适应我的当前缩进设置)。此外,我的所有Fortran代码都是现代化的;我不打开很多固定格式的文件。 - rusty

3
当我创建一个新的.f90文件时,Vim使用了固定格式/卡片式。为了区分它,我找到了这个。我将其复制到我的~/.vim/syntax/目录下,并在我的.vimrc文件中添加了以下行(也在下面的链接中指定)。
nmap <S-F> :set syntax=fortran<CR>:let b:fortran_fixed_source=!b:fortran_fixed_source<CR>:set syntax=text<CR>:set syntax=fortran<CR>
nmap <C-F> :filetype detect<CR>

允许我将Shift-F绑定为切换格式的快捷键,Ctrl-F绑定为自动检测的快捷键。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接