如何在Linux命令行更新VS Code settings.json并保留格式与注释?
解决Linux命令行更新VS Code settings.json并保留注释、格式的方法
方法1:用sed做针对性单行替换(适合少量修改)
sed可以精准匹配目标配置项的行,只替换值部分,完全保留原有注释、条目顺序和格式。
比如要把editor.fontSize从14改成16,执行:
sed -i '/^ *"editor.fontSize":/s/: .*,/: 16,/' ~/.config/Code/User/settings.json
- 解释:
/^ *"editor.fontSize":/匹配以任意空格开头、包含目标键的行;s/: .*,/: 16,/把该行的值,部分替换成16,。
如果是字符串类型的值(比如主题),注意转义引号:
sed -i '/^ *"workbench.colorTheme":/s/: "[^"]*",/: "\"Dracula\",/"' ~/.config/Code/User/settings.json
方法2:用Python的commentjson库(适合批量/复杂修改)
commentjson是专门支持带注释JSON的工具,能完美解析并保留原有注释、条目顺序和格式,修改后写回也不会破坏结构。
- 先安装库:
pip install commentjson
- 写一个简单的修改脚本(比如
update_vscode_settings.py):
import commentjson import sys # 接收参数:第一个是settings.json路径,第二个是要更新的键值对JSON字符串 settings_path = sys.argv[1] updates = commentjson.loads(sys.argv[2]) # 读取配置,保留注释和原始顺序 with open(settings_path, 'r', encoding='utf-8') as f: data = commentjson.load(f, object_pairs_hook=commentjson.OrderedDict) # 应用更新 for key, val in updates.items(): data[key] = val # 写回配置,保持原有缩进和格式 with open(settings_path, 'w', encoding='utf-8') as f: commentjson.dump(data, f, indent=4, ensure_ascii=False, sort_keys=False)
- 使用脚本批量修改:
python3 update_vscode_settings.py ~/.config/Code/User/settings.json '{"editor.fontSize": 16, "workbench.colorTheme": "Monokai", "editor.lineNumbers": "relative"}'
方法3:用awk做替换(类似sed,适合简单场景)
awk同样可以精准定位目标行并替换值,示例:
把editor.lineNumbers改成relative:
awk '/^ *"editor.lineNumbers":/ {sub(/: "[^"]*",/, ": \"relative\",")}1' ~/.config/Code/User/settings.json > temp.json && mv temp.json ~/.config/Code/User/settings.json
- 解释:
sub函数替换该行的目标值部分,1表示输出所有行,最后用临时文件覆盖原文件(避免sed -i可能的权限问题)。
注意事项
- VS Code的settings.json默认路径是
~/.config/Code/User/settings.json,Insiders版本路径为~/.config/Code - Insiders/User/settings.json。 - 执行修改前建议先备份原文件:
cp ~/.config/Code/User/settings.json ~/.config/Code/User/settings.json.bak
内容的提问来源于stack exchange,提问作者bayramkazik
相关产品推荐
相关产品推荐

