vscode本身不运行fortran代码,仅调度外部工具;必须确保gfortran、python3和fortls三者路径均正确配置且对gui进程可见,否则语法高亮、跳转定义、调试等功能全部失效。

VSCode 本身不运行 Fortran 代码,它只调度外部工具;没配好 gfortran、python3 和 fortls 三者路径,连语法高亮都会失效,更别说运行或调试。
确认 gfortran 和 python3 都在系统 PATH 中
Modern Fortran 扩展靠 gfortran 做语法检查和编译,靠 python3 启动 fortls 提供跳转和补全——两者缺一不可,且必须对 VSCode GUI 进程可见。
- 在终端执行
gfortran --version和python3 --version,都必须输出版本号 - Windows 用户:MinGW-w64 安装后,
gfortran.exe所在目录(如C:mingw64in)必须加进「系统环境变量」PATH,不是当前终端临时 PATH - macOS/Linux 用户:若用
pyenv,确保which python3返回的是能跑pip install fortls的那个 Python,别指向/usr/bin/python3(通常无pip)
手动安装 fortls 并显式配置路径
扩展界面上的“自动安装 fortls”在多数环境下静默失败,你看到 “Language Server Starting…” 卡住,基本就是这一步断了。
- 终端运行:
pip install --user fortls(非 root 场景必须加--user) - 验证安装:
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 默认配置
Code Runner 默认用 gfortran -o $fileNameWithoutExt $fileName 编译,不带 -g,生成的可执行文件没有调试信息——后续断点无效、变量名丢失、源码行不可见。
- 要么改
settings.json中的 executorMap:"code-runner.executorMap": {"fortran": "gfortran -g -Wall $fileName -o $fileNameWithoutExt && ./$fileNameWithoutExt"} - 要么更推荐:在 VSCode 内置终端手动执行,控制更明确:
gfortran -g -Wall hello_world.f90 -o hello_world && ./hello_world - 注意:仅靠 Code Runner 右键“Run Code”无法满足调试需求,它不生成调试符号
调试必须配 launch.json,且 program 指向带 -g 编译出的二进制
VSCode 调试器(GDB)不认 Fortran 类型,必须用 cppdbg 类型,且依赖 C/C++ 扩展;如果 program 字段指向未加 -g 编译的文件,Ctrl+F5 直接失败或断点不生效。
- 确保已安装 Microsoft 官方
C/C++扩展(ms-vscode.cpptools),否则cppdbg不可用 -
.vscode/launch.json中 type 必须为cppdbg,不是fortran(该类型不存在) -
program字段必须是绝对路径或工作区相对路径,指向用-g编译出的可执行文件,例如:"${workspaceFolder}/main" - 大型项目建议配合
tasks.json定义 build 任务,确保每次调试前都重新生成带调试信息的二进制
最常被忽略的是:三个路径(gfortran、python3、fortls)必须全部可被 VSCode GUI 进程访问,且 fortls 路径不显式写死就等于放弃语言服务器核心功能——跳转定义、符号查找、错误定位都会大幅退化。别信“自动检测”,亲手验证每个命令在 VSCode 终端里能否执行,才是唯一可靠动作。











