个人使用VScode打Codeforces的常用配置

我个人使用的配置是基于知乎上这篇文章上面进行了一些修改.

 1.文件夹组织:

 .vscode 配置文件.内容如下:

{
    "version": "0.2.0",
    "configurations": [
        {//这个大括号里是我们的‘调试(Debug)’配置
            "name": "Debug", // 配置名称
            "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
            "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${fileDirname}\bin\${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
            "args": [], // 程序调试时传递给程序的命令行参数,这里设为空即可
            "stopAtEntry": true, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
            "cwd": "${fileDirname}", // 调试程序时的工作目录,此处为源码文件所在目录
            "environment": [], // 环境变量,这里设为空即可
            "externalConsole": false, // 为true时使用单独的cmd窗口,跳出小黑框;设为false则是用vscode的内置终端,建议用内置终端
            "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,新手调试用不到
            "MIMode": "gdb", // 指定连接的调试器,gdb是minGW中的调试程序
            "miDebuggerPath": "D:\SoftWare\mingw64\bin\gdb.exe", // 指定调试器所在路径,如果你的minGW装在别的地方,则要改成你自己的路径,注意间隔是\
            "preLaunchTask": "build" // 调试开始前执行的任务,我们在调试前要编译构建。与tasks.json的label相对应,名字要一样
    }]
}
launch.json
{
    "files.associations": {
        "iostream": "cpp",
        "algorithm": "cpp",
        "deque": "cpp",
        "memory": "cpp",
        "tuple": "cpp",
        "vector": "cpp",
        "xlocnum": "cpp",
        "xmemory": "cpp",
        "xstring": "cpp",
        "xutility": "cpp",
        "type_traits": "cpp",
        "iterator": "cpp",
        "utility": "cpp",
        "xiosbase": "cpp",
        "xlocale": "cpp",
        "xlocinfo": "cpp",
        "xtree": "cpp",
        "queue": "cpp",
        "cctype": "cpp",
        "cerrno": "cpp",
        "cfloat": "cpp",
        "climits": "cpp",
        "cmath": "cpp",
        "concepts": "cpp",
        "cstddef": "cpp",
        "cstdint": "cpp",
        "cstdio": "cpp",
        "cstdlib": "cpp",
        "cstring": "cpp",
        "cwchar": "cpp",
        "exception": "cpp",
        "initializer_list": "cpp",
        "ios": "cpp",
        "iosfwd": "cpp",
        "istream": "cpp",
        "limits": "cpp",
        "map": "cpp",
        "new": "cpp",
        "ostream": "cpp",
        "stack": "cpp",
        "stdexcept": "cpp",
        "streambuf": "cpp",
        "string": "cpp",
        "system_error": "cpp",
        "typeinfo": "cpp",
        "xfacet": "cpp",
        "xstddef": "cpp",
        "xtr1common": "cpp",
        "bitset": "cpp",
        "ctime": "cpp",
        "list": "cpp",
        "set": "cpp"
    },
    "C_Cpp.errorSquiggles": "Enabled"
}
settings.json
{
    "version": "2.0.0",
    "tasks": [
        {//这个大括号里是‘构建(build)’任务
            "label": "build", //任务名称,可以更改,不过不建议改
            "type": "shell", //任务类型,process是vsc把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍
            "command": "g++", //编译命令,这里是gcc,编译c++的话换成g++
            "args": [    //方括号里是传给gcc命令的一系列参数,用于实现一些功能
                "${file}", //指定要编译的是当前文件
                "-o", //指定输出文件的路径和名称
                "${fileDirname}\bin\${fileBasenameNoExtension}.exe", //承接上一步的-o,让可执行文件输出到源码文件所在的文件夹下的bin文件夹内,并且让它的名字和源码文件相同
                "-g", //生成和调试有关的信息
                //"-Wall", // 开启额外警告
                //"-static-libgcc",  // 静态链接libgcc
                "-fexec-charset=GBK", // 生成的程序使用GBK编码,不加这一条会导致Win下输出中文乱码
                "-std=c++11", // 语言标准,可根据自己的需要进行修改,写c++要换成c++的语言标准,比如c++11
            ],
            "group": {  //group表示‘组’,我们可以有很多的task,然后把他们放在一个‘组’里
                "kind": "build",//表示这一组任务类型是构建
                "isDefault": true//表示这个任务是当前这组任务中的默认任务
            },
            "presentation": { //执行这个任务时的一些其他设定
                "echo": false,//表示在执行任务时在终端要有输出
                "reveal": "always", //执行任务时是否跳转到终端面板,可以为always,silent,never
                "focus": false, //设为true后可以使执行task时焦点聚集在终端,但对编译来说,设为true没有意义,因为运行的时候才涉及到输入
                "panel": "shared" //每次执行这个task时都新建一个终端面板,也可以设置为shared,共用一个面板,不过那样会出现‘任务将被终端重用’的提示,比较烦人
            },
            "problemMatcher": "$gcc" //捕捉编译时编译器在终端里显示的报错信息,将其显示在vscode的‘问题’面板里
        },
        {//这个大括号里是‘运行(run)’任务,一些设置与上面的构建任务性质相同
            "label": "run", 
            "type": "shell", 
            "dependsOn": "build", //任务依赖,因为要运行必须先构建,所以执行这个任务前必须先执行build任务,
            "command": "${fileDirname}\bin\${fileBasenameNoExtension}.exe", //执行exe文件,只需要指定这个exe文件在哪里就好
            "group": {
                "kind": "test", //这一组是‘测试’组,将run任务放在test组里方便我们用快捷键执行
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": true, //这个就设置为true了,运行任务后将焦点聚集到终端,方便进行输入
                "panel": "shared"
            }
        }

    ]
}
tasks.json

CF_Contest 打Codeforces专用,每次打完把内容手动清空.

DuiPai 对拍用,bf为朴素算法,sol为将测试算法,random为随机数据生成器,执行duipai以对拍.

  其中,bf,以data.in为输入,以data.ans为输出.

  sol以data.in为输入,以data.out为输出.

  random以data.in为输出.注意上述输入输出是位于SINGLE文件夹下的.

#include <cstdio>
#include <cstdlib>
#include <ctime>

int main() {
    for (int T = 1; T <= 100; T++) {
        system("DuiPai\bin\random.exe");
        double stSol = clock();
        system("DuiPai\bin\sol.exe");
        double edSol = clock();
        double stBf = edSol;
        system("DuiPai\bin\bf.exe");
        double edBf = clock();
        if (system("fc data.ans data.out")) {
            printf("#%d Wrong Answer
", T);
            break;
        } else
            printf("#%d Accepted
Sol time = %.0lfms
Bf time = %.0fms", T,
                   edSol - stSol, edBf - stBf);
    }

    return 0;
}
duipai.cpp

ProblemSet 用于平时做题,随意使用.

(忽略Study)

in,in2,out.txt也为平时做题测试时随意使用.

以上文件夹下的bin为可执行文件的存储位置,不重要.

2.快捷键

列出常用的快捷键,有些是默认设置,有些则不是,不予区分.

Ctrl+k 删除当前行

Ctrl+Shift+k 关闭当前终端

Ctrl+Enter 在当前行下一行插入空行

Ctrl+Shift+Enter 在当前行上一行插入空行

Ctrl+Shift+D 切换到调试界面

Ctrl+Shift+E 切换到文件夹界面

F5 编译运行

F4 调试

F11 单步执行

F10 单步跳过

Shift+F5 终止调试

此外,在终端窗口按下Ctrl+C可以强行终止正在运行的程序.

3.代码片段

代码片段分为全局(对所有文件夹)和局部(只对当前文件夹)作用的,但还有一个规则,在cpp文件里面输入prefix不会出现除cpp以外的代码片段.所以我直接设置三个全局代码片段也很方便.

全局代码片段默认存储在C盘某个复杂的路径下,局部则存储在这个文件夹里.可以通过在资源管理器中打开找到这个位置.

只放上几个常用的:

{
    "Print to console": {
        "scope": "cpp",
        "prefix": "qCF",
        "body": [
            "#include <algorithm>",
            "#include <cstdio>",
            "#include <cstring>",
            "#include <iostream>",
            "using namespace std;",
            "",
            "$0",
            "void solve();",
            "",
            "int main(){",
            "    int t;",
            "    scanf("%d", &t);",
            "    while(t--) solve();   ",
            "",
            "    return 0;",
            "}",
            "",
            "void solve(){",
            "",
            "}",
        ],
        "description": "A cpp file template for Codeforces contests."
    }
}
CppCodeforces.code-snippets

↑CF上的比赛基本都有多组数据,于是有了这个板子.输入qC(F)按tab即可调用.

{
    "Print to console": {
        "scope": "cpp",
        "prefix": "qICPC",
        "body": [
            "#include <algorithm>",
            "#include <cstdio>",
            "#include <cstring>",
            "#include <iostream>",
            "using namespace std;",
            "",
            "$0",
            "",
            "int main(){",
            "",
            "",
            "    return 0;",
            "}",
        ],
        "description": "A cpp file template for ICPC."
    }
}
CppICPC.code-snippets

↑适用于只有一组数据的题目,输入qI(CPC)按tab调用.

还有一个快读模板:

{
    "Print to console": {
        "scope": "cpp",
        "prefix": "qRead",
        "body": [
            "inline int read() {",
            "    char ch = getchar();",
            "    int x = 0, f = 1;",
            "    while (ch > '9' || ch < '0') {",
            "        if (ch == '-') f = -1;",
            "        ch = getchar();",
            "    }",
            "    while (ch >= '0' && ch <= '9') {",
            "        x = x * 10 + ch - '0';",
            "        ch = getchar();",
            "    }",
            "    return x * f;",
            "}",
        ],
        "description": "A cpp fast read template."
    }
}
CppRead.code-snippets

用q作为prefix的开头是为了防止与其它关键字冲突.

4.杂项设置

回车不进行自动补全,与tab区分开.

格式化代码风格(Clang_format_fallback Style):{ BasedOnStyle: Google, IndentWidth: 4}

原文地址:https://www.cnblogs.com/Gaomez/p/14234976.html