初心者向VisualStudio Code 便携版/多语言的配置(C Examples)

初心者向VisualStudio Code 便携版/多语言的配置(C Examples)

本文的目的:

完成windows下的便携多语言的配置

使用到的知识:cmd

文件结构(简略版)

vs code 根目录(带*为目录)
   ├─toolchain*         //用于存储工具链
   ├─data_c*            //用于存储c语言的插件和数据
      ├─extensions*    //存储c语言相关插件
      └─user-data*     //存储c语言工作区相关的用户数据
   ├─data_latex*        //用于存储LaTex的插件和数据(类似于c中建立文件夹)
   
   ├─code_c.bat         //启动C时配置
   └─code_latex.bat     //启动LaTex时配置

.bat配置(话说知乎代码块怎么还会唤出@想用@提到谁???

@echo off
set  PATH=%cd%\toolchain\git\bin;%cd%\toolchain\llvm\bin;%cd%\toolchain\mingw64\bin;%PATH%
start ./code %~f1 --user-data-dir ".\data_c\user-data" --extensions-dir ".\data_c\extensions" --locale=zh-cn
exit

第一行关闭回显 第二行临时设置环境变量,%cd%是自动获取当前目录填充

第三行start来启动并无需等待这条命令完成,第四行退出

关于第三行的命令 ./code 就是我们的主角vscode

%~f1[1]是为了实现拖入文件来打开的功能,这段会被文件全路径所填充

--user-data-dir ".\data_c\user-data" --extensions-dir ".\data_c\extensions"这个在官网上面有[2],分别指定了用户数据和插件目录

(前方吐槽注意回避)

--locale=zh-cn 指定中文包,其实VS code本身也有便携模式,只需要在目录下创建data文件夹就好了,比我所使用的方法更好,它顺带着把argv.json也放到data文件夹下了,但是使用这种方法后就不支持多路径,data文件夹存在与否的优先级似乎是高于command-line的,我觉得这是有违设计原则的。应该局部设置的优先级高于这种全局设置的优先级,我的提问到现在还没有人来回答[3]

差不多就这样制作完毕了,其实在vs code内也有很多占位符来让我们使用这种相对的路径下面就涉及到c具体的一个基本配置了,我还是一个萌新,也许这份配置会显得不够好用,还请见谅


c语言具体配置

遇到奇怪的问题把下面这篇文章读上十遍(笑)以前我就是参照这个的

Visual Studio Code 如何编写运行 C、C++ 程序?www.zhihu.com图标
  • 材料
    • git:我的选择是64bitPortable.,现在的win大都是64位的吧
    • MinGW-w64 最新版本点进去 threads-posix/seh提供gcc
    • clang 最新版本点进去 Pre-Built Binaries win 64bit
    • 插件列表:
      • C/C++
      • Chinese (Simplified) Language Pack for Visual Studio Code
      • vscode-clangd

编辑 编译 代码高亮/补全,这三部分别由Vs code,gcc,clangd完成,为此我们先创建一个工作区目录(虽然官方并没有给出工作区这种说法,但是我想这样叫)在下列文件中,悬停时,vscode会向你说明这些选项。

工作区目录
   ├─.vscode*            //用于存储c语言的插件和数据
   │   ├─task.json      //任务相关配置
   │   ├─launch.json    //debug相关配置
   │   └─settings.json  //局部设置(没什么存在的必要??)
   ├─out*                //用于存储输出
   ├─.clang-format       //用于格式化
   └─compile_flags.txt   //给clangd检测的编译参数(直译)

task.json,一个将VS code和外部链接起来的装置,嗯...就是任务的意思

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile_c",
            "command": "gcc",
            "args": [
                "${file}",
                "-o",
                "${workspaceFolder}/out/${fileBasenameNoExtension}.exe",
                "-g",
                "-Wall",
                "-static-libgcc",
                "-std=c11"
            ],
            "type": "process",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared"
            }
        },
    ]
}

额外的往task这个组里面填充就好了,这个其实就是一个命令行的作用,${workspaceFolder}[4]vscode会自动用工作区根目录的文字来代替这里的位置

launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "c编译并调试",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/out/${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "internalConsoleOptions": "neverOpen",
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "${execPath}\\..\\toolchain\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "Compile_c",
            "avoidWindowsConsoleRedirection": false
        },
    ]
}

miDebuggerPath这里我用了相对路径,其实不用的话直接写gdb,exe也行的,因为在path里面定义好了,但是我想会不会影响效率呢?感觉查找文件需要时间的,于是就保留下来了(其实是因为当初我希望不使用命令行而直接在快捷方式里面写参数时候的遗留产品,但是我后来真找不到不使用环境变量的方法了clangd的补全和报错是很吸引人的)

preLaunchTask是一个在debug前运行的task,与task.json里面的"label":"Compile_c",相互对应

externalConsole: true,我现在更习惯于外置窗口了,作业不好交,老师注意不到底下的输出,而且每次debug时候内置窗口的一堆命令回显很烦

compile_flags.txt,这份设置本身是给clang看的,就是一个编译的参数,头文件请使用-L<path>参数

-Wall
--target=x86_64-w64-mingw
-std=c11

下面就是一个很重要的全局设置了,Ctrl+, 打开设置的ui界面,右上角有小图标:打开设置(json)

    "editor.formatOnType": true,
    "editor.suggest.snippetsPreventQuickSuggestions": false, // clangd的snippets有很多的跳转点,不用这个就必须手动触发Intellisense了
    "editor.acceptSuggestionOnEnter": "off",// 我个人的习惯,按回车时一定是真正的换行,只有tab才会接受Intellisense
    "C_Cpp.errorSquiggles": "Disabled", // 因为有clang的lint,所以关掉;如果你看的是别的答主用的不是vscode-clangd,就不要加这个了
    "C_Cpp.autocomplete": "Disabled", // 同上;这几条也可以考虑放到全局里,否则很多错误会报两遍,cpptools一遍clangd一遍
    "C_Cpp.suggestSnippets": true,
    "terminal.integrated.shell.windows": "bash.exe",//${execPath}\\..\\toolchain\\git\\bin\\

至此,c语言配置完毕,记得重启vsc(好像clang每次更新配置后重启才能看到效果)下面是一些美化的部分

写完后发现少了个格式化的部分,我现在补上,参照了[5]

BasedOnStyle: llvm
IndentWidth: 4
BinPackParameters: false
# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效
BraceWrapping:
  # class定义后面
  AfterClass: false
  # Function定义后面
  AfterFunction: false
AllowShortBlocksOnASingleLine:	false
# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All
AllowShortFunctionsOnASingleLine:	Empty
# 连续赋值时,对齐所有等号
AlignConsecutiveAssignments:	true
# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations:	true
# 小括号两边添加空格
SpacesInParentheses : false



  • 材料
    • 更纱黑体(中文字体)
    • Cascadia Code(英文字体)
    • 插件 从上往下依次为 彩虹花括号 车万角色背景 不受支持修复
      • Bracket Pair Colorizer 2
      • background
      • Fix VSCode Checksums

安装好两款字体后就在 sitting.json里面加上

    "editor.fontFamily": "Cascadia Code,'Sarasa Term SC Regular'",
    "editor.fontLigatures": true,

Sarasa作为一个字族是有很多字体的,其中也有等距字体,但是那个英文的部分我看着不很适应(除了注释平时也用不到中文吧,反正我是避免使用的,所以放在最后的东西我就不在乎等不等距了这里我将两个字体混用,效果是这样的

第二个插件是可以自定义背景图片的,虽然并不想折腾,类似于这个的插件还是很多的,虽然原理也大致一样就是了

全文完


未知的领域

  • 材料
    • cmake
    • 插件
        • CMake
        • CMake Tools
CMakecmake.org图标Getting startedclangd.llvm.org图标Pokerpoke:VS Code与CMake真乃天作之合zhuanlan.zhihu.com图标

参考

  1. ^参照了 https://blog.csdn.net/qq_43278826/article/details/90106248
  2. ^相关 https://code.visualstudio.com/docs/editor/command-line
  3. ^提问 https://www.zhihu.com/question/374258202
  4. ^变量参考 https://code.visualstudio.com/docs/editor/variables-reference
  5. ^参照 https://blog.csdn.net/softimite_zifeng/article/details/78357898
编辑于 03-31