個人使用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\n", T);
            break;
        } else
            printf("#%d Accepted\nSol time = %.0lfms\nBf 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}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM