zoukankan      html  css  js  c++  java
  • 个人使用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}

  • 相关阅读:
    Gym-101128D:Dice Cup
    C++内联汇编,输出人物名字
    钩子
    列表控件ListBox关联的MFC中的类:CListBox
    高级列表控件ListCtrl关联的MFC中的类:CListCtrl
    菜单复选及窗口置顶
    MFC学习之EDIT控件初始化
    dbgprint_Mine 调试输出
    64位内联汇编
    win7下提权代码
  • 原文地址:https://www.cnblogs.com/Gaomez/p/14234976.html
Copyright © 2011-2022 走看看