diff --git a/.vscode/launch.json b/.vscode/launch.json index abe19ec..a37a783 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,19 +1,32 @@ +// https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md { "version": "0.2.0", "configurations": [ { - "name": "C++ Launch (GDB)", - "type": "cppdbg", - "request": "launch", - "targetArchitecture": "x86", - "program": "${workspaceRoot}\\${fileBasename}.exe", - "miDebuggerPath":"D:\\mingw64\\bin\\gdb.exe", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceRoot}", - "externalConsole": true, - "preLaunchTask": "g++" + "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示 + "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg + "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加) + "program": "C:\\Windows\\system32\\cmd.exe", // 将要进行调试的程序的路径(主目录需要有debug文件夹) + // "program": "${workspaceFolder}\\debug\\${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径(主目录需要有debug文件夹) + // "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径(Windows路径写法'\\') + // "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径(Linux路径写法'/') + "args": ["/C","${workspaceFolder}\\debug\\${fileBasenameNoExtension}.exe","&","pause"], // 程序调试时传递给程序的命令行参数,一般设为空即可 + // "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可 + "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点 + "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录 + "environment": [], // 环境变量 + "externalConsole": true, // 为true时使用单独的cmd窗口,与其它IDE一致;18年10月后设为false可调用VSC内置终端 + // "externalConsole": false, // 为true时使用单独的cmd窗口,与其它IDE一致;18年10月后设为false可调用VSC内置终端 + "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧? + "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb + "miDebuggerPath": "gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要 + "setupCommands": [ + { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": false } - ] - } - \ No newline at end of file + ], + "preLaunchTask": "Compile" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应 + }] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 6275f20..990423e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,109 @@ + { - "files.associations": { - "*.js": "javascript", - "iostream": "cpp" + "workbench.sideBar.location": "left", + "window.title": "${dirty}${activeEditorLong}${separator}${rootName}${separator}${appName}", + "editor.wordSeparators": "`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?·~!¥…()—【】、;:‘’“”,。《》? ", + "files.defaultLanguage": "c++", // ctrl+N新建文件后默认的语言 + "editor.formatOnType": false, // (对于C/C++)输入分号后自动格式化当前这一行的代码 + "editor.suggest.snippetsPreventQuickSuggestions": true, // clangd的snippets有很多的跳转点,不用这个就必须手动触发Intellisense了 + "editor.acceptSuggestionOnEnter": "off", // 我个人的习惯,按回车时一定是真正的换行,只有tab才会接受Intellisense + "editor.snippetSuggestions": "inline", // (可选)snippets显示在补全列表顶端,默认是inline + "C_Cpp.clang_format_sortIncludes": true, // 格式化时调整include的顺序(按字母排序) + "C_Cpp.autocomplete": "default", // 同上;这几条也可以考虑放到全局里,否则很多错误会报两遍,cpptools一遍clangd一遍 + "C_Cpp.suggestSnippets": true, // 同上 + "editor.fontFamily": "JetBrains Mono", + "editor.fontSize": 17, // 同上 + "editor.fontLigatures": true, // 连体字,效果不太好形容,见 https://typeof.net/Iosevka 最后一部分 + "editor.minimap.enabled": false, // 我个人不用minimap,就是右边那个东西 + "editor.dragAndDrop": false, // 选中文字后,可以拖动它们调整位置。我是不需要 + "editor.cursorSmoothCaretAnimation": "on", // 移动光标时变得平滑 + "editor.smoothScrolling": false, // 滚动平滑,不过效果很微弱 + "files.trimTrailingWhitespace": true, // 保存时,删除每一行末尾的空格 + "files.insertFinalNewline": true, // 保存后文件最末尾加一整行空行,Linux下的习惯 + "files.autoGuessEncoding": true, // 启用后,会在打开文件时尝试猜测字符集编码。我关闭的理由见6,默认也是禁用的 + "workbench.settings.useSplitJSON": false, // 恢复手动编辑时的两列设置 + "window.zoomLevel": 0, // 整体放大 + "git.enabled": true, // 如果你不用git,可以考虑关闭它 + "git.ignoreMissingGitWarning": true, // 同上 + "[c]": { + "files.encoding": "utf8" // 这样的格式可以对指定后缀的文件应用设置,如果你实在想用gbk,就这样设置吧。cpp同理。 }, - "C_Cpp.errorSquiggles": "disabled" -} \ No newline at end of file + "[c++]": { + "files.encoding": "utf8" // 这样的格式可以对指定后缀的文件应用设置,如果你实在想用gbk,就这样设置吧。cpp同理。 + }, + "files.associations": { + "iostream": "cpp", + "algorithm": "cpp", + "*.tcc": "cpp", + "random": "cpp", + "fstream": "cpp", + "istream": "cpp", + "ostream": "cpp", + "regex": "cpp", + "utility": "cpp", + "array": "cpp", + "atomic": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "cfenv": "cpp", + "charconv": "cpp", + "chrono": "cpp", + "cinttypes": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "codecvt": "cpp", + "complex": "cpp", + "condition_variable": "cpp", + "csetjmp": "cpp", + "csignal": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cuchar": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "forward_list": "cpp", + "list": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "vector": "cpp", + "exception": "cpp", + "functional": "cpp", + "iterator": "cpp", + "map": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "ratio": "cpp", + "set": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "future": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "scoped_allocator": "cpp", + "shared_mutex": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "typeindex": "cpp", + "typeinfo": "cpp", + "valarray": "cpp", + "queue": "cpp" + }, + "C_Cpp.errorSquiggles": "Enabled", +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json index acfbd8c..c55b12f 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,17 +1,31 @@ +// https://code.visualstudio.com/docs/editor/tasks { "version": "2.0.0", - "command": "g++", - "args": ["-g","-std=c++11","${file}","-o","${workspaceRoot}\\${fileBasename}.exe"], - "problemMatcher": { - "owner": "cpp", - "fileLocation": ["relative", "${workspaceRoot}"], - "pattern": { - "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5 - } - } + "tasks": [{ + "label": "Compile", // 任务名称,与launch.json的preLaunchTask相对应 + "command": "g++", // 要使用的编译器,C++用g++ + "args": [ + "${file}", + "-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out + // "${fileDirname}/${fileBasenameNoExtension}.exe", + "${workspaceFolder}\\debug\\${fileBasenameNoExtension}.exe", // 输出到主目录的debug文件夹中 + "-g", // 生成和调试有关的信息 + "-Wall", // 开启额外警告 + "-static-libgcc", // 静态链接libgcc,一般都会加上 + "-fexec-charset=utf-8", // 生成的程序使用GBK编码,不加这一条会导致Win下输出中文乱码 + // "-std=c11", // C++最新标准为c++17,或根据自己的需要进行修改 + ], // 编译的命令,其实相当于VSC帮你在终端中输了这些东西 + "type": "process", // process是vsc把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍 + "group": { + "kind": "build", + "isDefault": true // 不为true时ctrl shift B就要手动选择了 + }, + "presentation": { + "echo": true, + "reveal": "always", // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档 + "focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义 + "panel": "shared" // 不同的文件的编译信息共享一个终端面板 + }, + "problemMatcher":"$gcc" // 此选项可以捕捉编译时终端里的报错信息;但因为有Lint,再开这个可能有双重报错 + }] }