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,