【问题标题】:Emacs setup for fortran用于 fortran 的 Emacs 设置
【发布时间】:2020-02-06 21:37:41
【问题描述】:

我目前正在使用 emacs 处理一个大型 Fortran 项目,但我觉得我目前的设置不足以完成这项任务。

我使用带有自动完成功能的 f90 模式(没有特定于 fortran 的设置,所以我只对打开的文件进行完成),我真的很想念悬停时的函数头信息(如在 elisp 代码中)、代码折叠、列表当前缓冲区中的子程序、包含文件的列表、子程序的来源信息和使用的变量(C-xC-f 打开源文件?),...

如何在我的 emacs 中最好地为 fortran 添加现代支持功能?

我主要需要工具来帮助我理解项目代码。

该项目使用自己的构建工具,并在构建之前将文件从不同目录复制到构建目录中,实际上用不同版本的代码覆盖了一些文件,因此我需要一个非常灵活的工具来应对。

【问题讨论】:

    标签: emacs fortran


    【解决方案1】:

    有一个名为Fortran-tags 的小型 Emacs 插件。它可以找到光标下的任何变量或过程的定义,因此它与Ctags类似,只是它能够正确识别所有局部和全局变量并具有一些附加功能。此外,它的开发重点是现代 Fortran。

    【讨论】:

    • 我会说,以防万一此时它仅适用于 Linux。 (将它移植给其他人可能并不难。)
    • 伙计,很长一段时间以来,我一直在努力在 Emacs 中找到一半体面的 fortran 标签支持。我一直在做一些事情,比如为 etags 定义自定义正则表达式,尝试将 GNU Global/ggtags 与 pygments 相结合,并试图弄清楚如何至少将 imenu 用于标签,但这实际上看起来是一个可以接受的开箱即用解决方案。非常感谢您在这里发布。
    • 好吧,看来 Fortran-tags 项目有很多 bug/hacky/unrobust。首先,由于 str.split 与关键字的一些非标准使用,它似乎需要 python3。其次,当新文件添加到要处理的文件列表中并且更新 FORTAGS 时,新文件将添加到顶部的文件列表中,但不会添加来自该文件的标签。最后,当我使用 ISO_C_BINDING 东西时,我得到File "/usr/local/bin/fortran-tags.py", line 314, in process_input position = int((m.start()+m.end())/2) AttributeError: 'NoneType' object has no attribute 'start'
    • 感谢您的反馈。我会尽快修复任何错误。是的,它确实需要python3,实际上允许使用您指出的关键字。现在在文档中提到了这一点,以避免进一步混淆。我删除了关键字,现在它似乎可以与 python2 一起使用,虽然我不能保证完全兼容。
    • 至于您的其他 cmets,我没有遇到任何问题。也许您在代码中使用了一些非标准元素? Fortran-tags 绝对不适用于所有可能的源代码(这需要编译器级别的复杂性)。我已经努力与旧标准和一些非标准的编码方式兼容,但仍然对编码风格做出了一些假设。有关信息,我在开发 Fortran 标记时使用 Abinit 和 Quantum Espresso 以及我自己的任何项目作为参考。让我们在 sourceforge 继续这个对话。
    【解决方案2】:

    在 emacs 中使用fortran-language-server(安装后只需在终端中启动fortls)和lsp-mode 即可完美运行。

    【讨论】:

      【解决方案3】:

      我现在在 elpa 中找到了 f90-interface-browser。

      如果你使用 emacs 24 或更高版本,你可以使用

      M-x package-list-packages
      

      然后搜索f90-interface-browser

      您编写(或处理)大型现代 fortran 代码库。这些 大量使用函数重载和泛型接口。您的 大脑太小,记不住所有的专家是什么 叫。因此,您的编辑应该帮助您。

      【讨论】:

      • 这个包没用,AFAICT。查看 yasn-p 和 smart-tab 等
      • 有谁知道是否有任何可能正在进行的工作将 Fortran(>=90,希望 2003(8))包含在内置的 emacs 支持中,我的意思是 CEDET/Semantic?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      • 2020-10-07
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多