vscode-settings.json
跳板机
win一般用来做跳板机,远程连接linux开发机的。win配置文件路径一般如下:C:\Users\langhhuang\AppData\Roaming\Code\User\settings.json
当然,使用linux作为跳板机,远程连接另外一台linux开发机也是可以的。
整个vscode的配置,如果登录了账号会进行全局同步(建议登录微软账号)【用来同步所有跳板机的配置】
开发机
该份配置不会进行同步
一般开发机都是linux机器,如果远程ssh连接linux开发,那么会在远程开发机的~/.vscode-server
目录下有settings.json文件,记录给远程主机的独特配置。
项目settings.json与工作区settings
因为工作区下面有很多个项目文件,.code-workspace设置的settings会影响所有的项目文件。
在.vscode目录下的settings.json,只会影响当前项目的配置。
如果打开的是工作区,那么有些配置就只会使用工作区里的。settings.json很多配置是不生效的。
此设置无法应用于此工作区。它将在您直接打开包含的工作区文件夹时应用。
配置文件生效顺序
.code-workspace—>.vscode/settings.json—->Linux远程服务器settings.json—->windows跳板机setting.json
配置目录建议
.Proj
├──.vscode
│ ├──settings.json
│ ├──launch.json
│ └──tasks.json
├── ...
└──xxx.code-workspace 【当有多个项目时才使用,一般不需要】
cpp开发环境搭建
使用VS Code作为cpp开发环境时,C/C++插件是必不可少的,C/C++插件的功能大概有三块,对应的配置文件如下:
- c_cpp_properties.json:用于指定C++项目的编译器路径、包含目录、宏定义、编译器选项等信息。
- launch.json:用于配置调试器,包括调试的启动方式(例如本地调试、远程调试)、调试器的类型(例如GDB、LLDB)、启动命令、命令行参数等。
- tasks.json:用于配置任务,包括编译任务、运行任务、清理任务等。可以通过该文件配置快捷键来执行任务,提高开发效率。
如果将C_Cpp.intelliSenseEngine设置为"disabled",只是禁用了C/C++插件的代码智能提示功能,不会影响其他的功能(调试、配置任务都还保留)。禁用代码提示功能后,c_cpp_properties.json这个文件就没用了。
task.json
task.json是配置 编译任务,编写makefile时建议使用绝对地址,使用相对地址容易出问题
{
"tasks": [
{
"label": "compile_libet.so",
"type": "shell",
"command": "${workspaceFolder}/compile_env/linux/build.sh debug x64",
"group": {
"kind": "build",
"isDefault": true
},
},
{
"label": "compile_testdemo",
"type": "shell",
"command": "make -f ${workspaceFolder}/test/makefile build",
"group": "test"
}
],
"version": "2.0.0"
}
lanuch.json
lanuch.json是配置调试任务的
{
"version": "0.2.0",
"configurations": [
{
"name": "gdb",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/test/main", //被调试程序的全路径
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}", //调试时,程序运行的路径
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
//开始调试之前执行的任务,执行task.json中对应label的编译任务
"preLaunchTask": "compile_testdemo"
}
]
}
智能提示
C/C++插件
使用C/C++插件作为智能提示时使用c_cpp_properties.json
作为配置文件,参考:c_cpp_properties.json reference (visualstudio.com)
{
"configurations": [
{
"name": "Linux",
"includePath": [ //添加上gcc头文件的路径,防止提示报错。
"${workspaceFolder}/**",
"/usr/lib/gcc/x86_64-linux-gnu/9/include",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include"
],
"defines": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++11",
"intelliSenseMode": "linux-gcc-x64",
"configurationProvider": "ms-vscode.makefile-tools",
"mergeConfigurations": true
}
],
"version": 4
}
clangd插件
需要将c/c++插件禁用,以防冲突
"C_Cpp.intelliSenseEngine": "disabled"
clangd的参考配置如下
{
"clangd.path": "/usr/bin/clangd",
"clangd.arguments": [
// 输出的 JSON 文件更美观
"--pretty",
//compile_commands.json的目录
"--compile-commands-dir=${workspaceFolder}/build",
//
"--query-driver=/usr/bin/clang++14",
// 在后台自动分析文件(基于complie_commands)
"--background-index",
// 同时开启的任务数量
"-j=8",
// 全局补全(会自动补充头文件)
"--all-scopes-completion",
// 更详细的补全内容
"--completion-style=detailed",
// 启用这项时,补全函数时,将会给参数提供占位符,键入后按 Tab 可以切换到下一占位符,乃至函数末
// 我选择禁用
"--function-arg-placeholders=false",
// 补充头文件的形式
"--header-insertion=iwyu",
// 输入建议中,已包含头文件的项与还未包含头文件的项会以圆点加以区分
"--header-insertion-decorators",
// pch优化的位置
"--pch-storage=memory",
// clang-tidy功能
"--clang-tidy",
"--clang-tidy-checks=performance-*,bugprone-*"
]
}
代码格式化与代码分析
一般格式化使用clang-format,代码分析使用clang-tidy,但是这两个功能是和插件绑定的,由插件提供。【需要注意不要同时启用多个格式化的插件,否则就不会生效了,因为会冲突。】
关于格式化的配置有如下:
editor.formatOnSave
- to format when you save your file.editor.formatOnType
- to format as you type (triggered on the ; character).editor.defaultFormatter
-设置格式化所使用的插件工具
如果禁用了c/c++插件,配置了"editor.defaultFormatter": “ms-vscode.cpptools"也无法自动格式化。格式化的能力是由插件提供的。
C/C++插件
c/c++也是使用的clang-format来进行格式化。
默认情况下,c/c++
插件使用的是file
模式,会在工作目录下面找.clang-format
文件,找到了就按照这个来,没有就会使用默认风格。默认风格的配置由C_Cpp.clang_format_fallbackStyle
来设置。
同时可以不使用c/c++
插件自带的clang-format,可以通过C_Cpp.clang_format_path
来设置clang-format的路径,一般来说使用自带的就行了,没啥必要自己另外装。
clangd插件
clangd插件默认是带了format功能的,只需要如下配置就行了。
clangd无法设置clang-format的路径,无法指定版本(一般clangd自带的clang-format会和clangd的版本一致的)。
"editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
至于代码分析,则可以通过如下配置进行启用
"clangd.arguments":[
...
"--clang-tidy",
"--clang-tidy-checks=performance-*,bugprone-*"
...
],
注意,项目下需要有.clang-format和.clang-tidy文件
个人使用配置
{
"folders": [
{
"path": ".."
}
],
"settings": {
//设置clangd的路径
"clangd.path": "/usr/bin/clangd",
"clangd.arguments": [
// 输出的 JSON 文件更美观
"--pretty",
//compile_commands.json的目录
"--compile-commands-dir=${workspaceFolder}/build",
//
"--query-driver=/usr/bin/clang++14",
// 在后台自动分析文件(基于complie_commands)
"--background-index",
// 同时开启的任务数量
"-j=8",
// 全局补全(会自动补充头文件)
"--all-scopes-completion",
// 更详细的补全内容
"--completion-style=detailed",
// 启用这项时,补全函数时,将会给参数提供占位符,键入后按 Tab 可以切换到下一占位符,乃至函数末
// 我选择禁用
"--function-arg-placeholders=false",
// 补充头文件的形式
"--header-insertion=iwyu",
// 输入建议中,已包含头文件的项与还未包含头文件的项会以圆点加以区分
"--header-insertion-decorators",
// pch优化的位置
"--pch-storage=memory",
// 启动clang-tidy功能
"--clang-tidy",
"--clang-tidy-checks=performance-*,bugprone-*"
],
//设置格式化插件
"[cpp]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
},
"[c]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
},
}
}
go开发环境搭建
在vscode中,只需要安装了Go和Go Nightly就完事了。安装了Go插件后,还需要下载一些依赖的辅助工具:
这里有一个坑就是,必须得给当前远程连接的用户$GOPATH
路径的读写权限才行,否则无法安装。
这些工具怎么使用可以参考go-tools
配置这些插件可以通过UI来,也可以直接写settings.json,不过初次接触还是建议使用UI把。
格式化的时候,先得把全局的"editor.defaultFormatter”: “ms-vscode.cpptools"给关掉,这样针对特定的语言,需要特别的配置。如此就能格式化go的代码了。
"go.formatTool": "gofmt",
"go.lintOnSave": "file",
"[go]": {
"editor.insertSpaces": false,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
"editor.suggest.snippetsPreventQuickSuggestions": false
},
"go.autocompleteUnimportedPackages": true,
"go.installDependenciesWhenBuilding": true,
"gopls": {
"build.experimentalWorkspaceModule": true
},
"go.toolsManagement.autoUpdate": true,
...