根本原因是gfortran、python3和fortls三者路径或权限未对齐:gfortran和python3必须在系统级path中(gui版vscode不继承终端临时path),fortls须手动pip安装并显式配置路径,否则语法高亮、跳转定义、调试等功能全部失效。

VSCode 跑不了 Fortran 代码,根本原因不是插件没装全,而是 gfortran、python3、fortls 这三样东西的位置或权限没对齐——缺一个,语法高亮就飘,Ctrl+Click 跳不到定义,Language Server Starting… 卡住不动,更别说调试了。
确认 gfortran 和 python3 都在系统 PATH 中
VSCode GUI 启动时不会继承你在终端里临时改的 PATH,所以“终端里 gfortran --version 能跑”不等于 VSCode 能调到它。
- 必须在终端分别执行
gfortran --version和python3 --version,两者都得输出版本号 - Windows 用户:MinGW-w64 或 LLVM-MinGW 安装后,要把
gfortran.exe所在目录(如C:llvm-mingwin)加进「系统环境变量」PATH,不是只改当前命令行 - macOS/Linux 用户:若用
pyenv,确保python3指向你用来pip install fortls的那个版本;/usr/bin/python3通常没pip,不能用
手动安装 fortls 并显式指定路径
Modern Fortran 扩展界面上那个“自动安装 fortls”按钮,实测在绝大多数场景下静默失败,且完全不报错——你看到状态栏卡在 Fortran LS Starting…,基本就是这步断了。
- 终端运行:
pip install fortls(Linux/macOS)或pip install --user fortls(Windows 权限受限时) - 验证安装:
fortls --version应输出类似fortls 2.4.1;若提示command not found,说明可执行文件路径没进 PATH - Linux/macOS 查
~/.local/bin/fortls,Windows 查%APPDATA%PythonPython311Scriptsortls.exe - 在
.vscode/settings.json中强制写死路径:"fortran.fortls.path": "/home/you/.local/bin/fortls"(Linux/macOS)或"fortran.fortls.path": "C:\Users\You\AppData\Roaming\Python\Python311\Scripts\fortls.exe"(Windows)
Code Runner 默认编译不带 -g,调试必然失败
Code Runner 插件默认用 gfortran -o $fileNameWithoutExt $fileName 编译,不加 -g 参数——生成的可执行文件没有调试信息,GDB 就看不到源码行、变量名,断点设了也停不住。
- 如果只是快速运行单文件,建议直接在 VSCode 内置终端手动执行:
gfortran -g -Wall hello_world.f90 -o hello_world && ./hello_world - 如果想一键运行,可在
settings.json中重写 executorMap:"code-runner.executorMap": {"fortran": "gfortran -g -Wall $fileName -o $fileNameWithoutExt && ./$fileNameWithoutExt"} - 真正要调试,必须配
.vscode/launch.json,类型选cppdbg(不是fortran),program字段必须指向用-g编译出的可执行文件 - 别忘了装 Microsoft 官方的
C/C++扩展,否则cppdbg类型不可用
Fortran 文件后缀和大小写敏感问题常被忽略
Modern Fortran 扩展默认识别 .f90、.f、.F90、.F 等后缀,但大小写规则影响解析方式:
-
.f90(小写 f)→ 自由格式,被正确识别为标准 Fortran 源码 -
.F90(大写 F)→ 被视为预处理文件,需额外开启fortran.preprocessor.enabled才能展开宏 - 文件名含空格或中文路径,
fortls启动可能失败,建议项目根目录路径纯英文、无空格 - 大型项目中,
fortls默认参数可能导致符号解析慢或漏,需在settings.json中加--incremental_sync等参数优化
最麻烦的不是步骤多,而是三个依赖(gfortran、python3、fortls)各自独立生效,任一环节路径或权限不对,整个语言服务器就半瘫痪——跳转失效、补全失灵、错误不报,表面看着在跑,实际功能只剩语法高亮。别信“自动检测”,每个路径都亲手验证一遍才是唯一靠谱的做法。











