code runner默认仅用ctrl+alt+n一个快捷键,运行逻辑完全依赖文件后缀和executormap配置;需确保解释器可用、文件已保存且带正确后缀,并启用runinterminal,否则会静默失败。

Code Runner 默认快捷键不区分语言,必须靠 executorMap + 文件后缀识别
Code Runner 本身没有“为 Python 绑定 Ctrl+1、为 JS 绑定 Ctrl+2”这类语言专属快捷键。它只认一个快捷键(Ctrl+Alt+N),运行逻辑完全取决于当前文件后缀(如 .py → 走 python 配置项,.js → 走 node 配置项)。所谓“自定义快捷键运行不同语言”,本质是确保每种后缀都指向正确的执行命令,而不是改快捷键本身。
修改 code-runner.executorMap 适配常见语言差异
打开 VSCode 设置(Ctrl+,),搜索 code-runner.executorMap,点击「在 settings.json 中编辑」。关键不是加新快捷键,而是让每种语言的命令准确、可交互、路径正确:
-
python:若用虚拟环境,必须写绝对路径,例如"python": "/path/to/venv/bin/python -u";Windows 注意反斜杠转义或用正斜杠 -
javascript:默认node $fileName即可,但若项目含package.json且需require本地模块,建议加cd $workspaceRoot &&前缀 -
cpp:单文件编译运行常用"cpp": "cd $dir && g++ -std=c++17 -o $fileNameWithoutExt.out $fileName && ./$fileNameWithoutExt.out";注意-std=版本要匹配代码语法 -
shellscript:Linux/macOS 下常因权限报Permission denied,直接改成"shellscript": "bash $fileName"更稳妥 -
typescript:需先编译再运行,例如"typescript": "cd $dir && tsc $fileName && node $fileNameWithoutExt.js",前提是已全局安装tsc
避免快捷键失效的三个硬性前提
哪怕 executorMap 写得再准,以下任一条件不满足,Ctrl+Alt+N 都会静默失败或报错:
- 对应解释器/编译器必须在终端中直接可用:在 VSCode 集成终端里敲
python --version或gcc --version必须有响应,否则插件根本调不动 - 文件必须已保存并带正确后缀:未保存的临时文件或后缀名错误(比如把
main.py改成main.txt)会导致 Code Runner 完全不触发 -
code-runner.runInTerminal必须为true:否则input()、readline()类交互式操作会卡死,Node.js 脚本也容易闪退看不到输出
真正需要“多快捷键”的场景,该换用 tasks.json
如果你确实需要一键运行“当前 Python 文件用 venv A”、“当前 JS 文件用 Node v18”、“当前 TS 文件用 tsc + Node v20”,那已经超出 Code Runner 的设计边界。它不管理多版本环境切换,也不支持按快捷键动态选解释器。
此时应放弃 executorMap,改用 VSCode 原生 tasks.json:
- 在项目
.vscode/tasks.json中定义多个 task,如run-python-venv-a、run-js-node18 - 为每个 task 分配快捷键(通过
keybindings.json绑定workbench.action.terminal.runActiveFile或自定义命令) - Code Runner 可停用,或仅保留基础功能——它的优势从来不是精细控制,而是“写完就按一下”的轻量验证
最易被忽略的是:Code Runner 的“一键”只对单文件、无复杂依赖、环境路径明确的场景成立。一旦涉及多版本、跨目录 import、编译链嵌套,它就只是个触发器,真正的执行逻辑必须下沉到 shell 命令或 task 系统里。











