使用 VSCode 工作区提高多项目效率

介绍工作区,以及项目下的启动和任务的配置

Posted by Jerry Chen on June 1, 2020

⚠ 感觉工作区方式不适合我,仅供大家参考;

一些介绍

使用 VSCode 打开一个目录,适合单项目开发;

使用 VSCode 的工作区功能,适合多个项目的管理,每个项目中均可有一个“.vscode”文件夹;

开始

规划

  • .../vscode/ 作为工作区目录;
  • .../vscode/prj1/ 作为项目1目录;
  • .../vscode/prj2/ 作为项目2目录;

将工作区另存为

初次打开 VSCode,点击“文件” –> “将工作区另存为” –> “输入路径和名称保存:.../vscode/mywork”;

这里我输入名称为 .../mywork,点击确定后会生成 .../mywork.code-workspace 文件;

复制工程到工作区目录

复制我已有的工程目录到 .../vscode/目录。放其他目录也可以,便于理解我就放在了工作区下;

在工作区中添加工程

当工作区没有任何工程时,点击“添加文件夹”即可,选择上一步的项目目录;

当工作区已经有工程存在,在工作区面板右键选择“将文件夹添加到工作区”,然后选择项目目录;

给每个工程添加运行和任务

每个工程单独设置运行和任务配置。当前活动的工程不同${workspaceFolder} 的值也是不同的,所以 tasks.json 尽可能使用含有 ${workspaceFolder} 的路径;

VSCode 上的设置

c_cpp_properties

如果你编写 Linux 驱动,最好给工程指定头文件路径和宏,否则会很难找到头文件;

按快捷键“Ctrl + Shift + P”,然后搜索>Edit configurations ,单击后会打开一个 c_cpp_properties.json 文件:

samsung s3c24xxx 才按照下面添加,具体的参见:https://blog.csdn.net/ningjianwen/article/details/88075042

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/linux-3.10/include",
                "${workspaceFolder}/linux-3.10/arch/arm/plat-samsung/include",
                "${workspaceFolder}/linux-3.10/arch/arm/mach-s3c24xx/include"
            ],
            "defines": [
                "__KERNEL__"
            ],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++14",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

launch

所有的 launch 会放在调试面板,加后缀区分工程;

当有多个工程时:pwd 默认指示第一个工程的路径,所以调用的脚本尽可能使用 dirname $0 替代 pwd

建议有两个:gdb 和 arm-gdb;

完整 launch.json 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/Prj/Linux/Output/Exe/main",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
        {
            "name": "(arm-gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/Prj/Linux/Output/Exe/main",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/arm-linux-gnueabihf-gdb",
            "miDebuggerServerAddress": "192.168.2.2:7777",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
    ]
}

tasks

所有的 task 会放在“终端” –> “运行任务…”中,加后缀区分工程;

当有多个工程时:pwd 默认指示第一个工程的路径,所以调用的脚本尽可能使用 dirname $0 替代 pwd

建议有:

  • 编译
  • 传送编译后文件
  • 传送当前打开的文件
  • 运行当前打开的脚本(仅sh)

完整 tasks.json 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "make",
            "type": "shell",
            "command": "cd ${workspaceFolder}/Prj/Linux;./automake.sh",
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "trans",
            "type": "shell",
            "command": "${workspaceFolder}/Prj/Linux/Tools/x86/file_send_client",
            "args": [
                "192.168.2.2",
                "10069",
                "${workspaceFolder}/Prj/Linux/Output/Exe/main",
                "/root/mywork",
                "mod",
                "0755"
            ],
        },
        {
            "label": "trans activity file",
            "type": "shell",
            "command": "${workspaceFolder}/Prj/Linux/Tools/x86/file_send_client",
            "args": [
                "192.168.2.2",
                "10069",
                "${file}",
                "/root/mywork",
                "${fileBasename}",
                "0755"
            ],
        },
        {
            "label": "run activity sh script",
            "type": "shell",
            "command": "chmod +x ${fileDirname}/${fileBasenameNoExtension}.sh;${fileDirname}/${fileBasenameNoExtension}.sh",
        }
    ]
}

快捷键

所有工程共用一套快捷键,按下后会依次从最上方的工程向下找对应的任务执行,所以建议把目标工程移动到工作区最上方;

移动工程到工作区最上方的方法:

建议有:

  • 编译:ctrl + shift + 6
  • 传送编译后文件:ctrl + shift + 7
  • 传送当前打开的文件:ctrl + shift + 8
  • 运行当前打开的脚本(仅sh):ctrl + shift + 9

完整 tasks.json 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 将键绑定放在此文件中以覆盖默认值
[
    {
        "key": "ctrl+shift+6",
        "command": "workbench.action.tasks.runTask",
        "args": "make"
    },
    {
        "key": "ctrl+shift+7",
        "command": "workbench.action.tasks.runTask",
        "args": "trans"
    },
    {
        "key": "ctrl+shift+8",
        "command": "workbench.action.tasks.runTask",
        "args": "trans activity file"
    },
    {
        "key": "ctrl+shift+9",
        "command": "workbench.action.tasks.runTask",
        "args": "run activity sh script"
    }
]

端口映射

在“Remote - SSH”插件面板中直接设置转发的端口即可;

代码高亮

方法一:(不建议)

在 settings.json 中自定义高亮色;

1
2
3
4
5
{
    "workbench.colorCustomizations": {
        "editor.selectionHighlightBackground": "#c5293e"
    }
}

方法二:

安装“highlight-words”插件;

选中关键字后,命令面板输入 >Highlight Toggle Current 设置高亮;

  • Highlight Remove:在命令行取消高亮(单个/文本块/全部);
  • Highlight Remove All:取消全部高亮;
  • Highlight Toggle Current:对单个字符串进行 高亮/取消,使用鼠标选中文本块时,可高亮整个文本块。