如何让你的 Sublime 显得比蒋老师还高级✨✨✨——Sublime 食用教程

· · 科技·工程

Sublime 超详细食用教程

UPD 记录

2025.8.22 修改了一些小瑕疵,添加问题解决的板块,如有问题,请至最后先查看,没有解决办法私信作者。

安装过程中跳出弹窗:

直接点关掉就可以了。(点取消一样的)。

由于我的电脑配置很低,搞 OI 的时候电脑容易死机,今天教大家配置一款~大佬都在用~超级好用的文本编辑器:

:::align{center} ——sublime ::: 先介绍一下 ta:

::::success[优点]

  1. 小:多小呢,简单装配成可运行程序后(携带编译器)总共只有一个 GB。
  2. 不占内存:即使配上了 clang + 自动补全,也没法将小内存电脑(8 GB)卡爆。
  3. 可以携带:可以拷到 U 盘,上传云盘,下载后简单配置即可使用(不像某编程软件还得花很长时间安装配置)。
  4. 优秀:是同级编程软件中最好用的(主观)。
  5. 相较于其他编辑器,更轻量,更省钱,虽然不是免费开源,但是不给钱可以免费用。

相较于 CLion、VSCode,不仅更轻量化,接口还更多更便携,更不是内存杀手开个IDE都得蓝屏。 ::::

::::warning[缺点]

  1. 每次转移阵地都得重配一部分东西(虽然不多,就一分钟)。
  2. 得手动配置。

::::

那接下来进入正题:如何配置呢?

我自己试过两种配置方法,这里我两个都讲,不过一个配置好一点但比较大,另一个小一点配置低一点但很简单便携。

本质上来说两种没什么区别,不过就是一个用的是 msys2(CF 同款),另一个用的是 MinGW(GCC);一个可以自动补全一个不行;一个可以不开 cmd 一个要开而已……

前情提要

在配置之前先确认一下这些事:

  1. 是不是 Windows 系统:Win10/11 (两个的效果差不多)
  2. 是否下载 sublime,这里统一用便携版演示。如果没有出门左拐(点击直接下载,会卡一下),时间在 1 分钟、5 分钟、10 分钟、20 分钟、1 小时不等,会忽快忽慢,取决于网速,建议下载时使用迷雾通(提取码 9939 ,一直点确定然后要把桌面快捷方式打开。没有账号直接点注册然后把那一串数纪录一下然后点登录就可以了),接着解压。
  3. ~你会不会编程~ sublime 能不能打开?如果被拦截请自行加入白名单(如果是 360 安全卫士拦截而不是 Windows Defener,那建议你直接把 360 安全卫士删了)。

Part 1. 便携版(复杂版预配置第一步,第三步,第四步)

:::warning[注意]{open} 配置复杂版的人不要运行代码,不要运行代码,不要运行代码!!! :::

Step 1 基础配置

首先打开你下载好的 Sublime 文件夹,找到 sublime.exe 打开它。

然后应该是这样的:

接着按 ctrl+shift+p 打开命令面板(可以理解为管理终端),输入 Install Package Control,按回车。

就会是从这样:

然后啥也没发生,等个一分钟应该就会跳出如下弹窗:

说明安装成功。如果没有可以多试几次,或用刚刚的迷雾通加速后重试。

Package Control 是用来插件管理的插件,可以方便的安装删除插件。

后面他会跳一些弹窗然后按着他的说法做就对了。

Step 2 安装 MinGW-w64(复杂版用户跳过,不嫌麻烦可以装,到时候得删)

这里不建议用安装程序安装 MinGW-w64,这里使用 github 中大佬搞到的压缩文件,下载网址:https://github.com/niXman/mingw-builds-binaries/releases/download/15.1.0-rt_v12-rev0/x86_64-15.1.0-release-win32-seh-ucrt-rt_v12-rev0.7z

但是不建议用这个链接下载,除非你有 magic,否则听我一句劝:

  1. 打开浏览器。
  2. 打开 https://ghproxy.net/,如果用不了的话,开:https://gitproxy.click/ 会慢一点,但能用。
  3. 然后输入刚才的网址。

解压完后就是这样的东西:

然后把那个 mingw64 移到 sublime 的文件夹中(如果你要携带的话),接着把文件下的 bin 文件夹的地址复制(应该长这样 (保存的目录)/mingw64/bin )。

接下来配置系统路径: 右击此电脑,点击属性,win 10 会跳出来这个界面:

然后点击 “高级系统设置” 打开如下界面:

点击环境变量:

点击上面Path,然后点上面的编辑:

然后出来这个:

点击新建,然后把刚才复制的贴进去,一直点确定退出。

那现在就把 Mingw-w64 配置好了。

可以打开 cmd 然后输入 g++ -v 就可以验证安装是否成功。

Step 3 配置 sublime 的编译文件。

打开 sublime,点击 Tools( 工具)然后点击 Build System(编译系统)然后点 New Build System...(新建编译系统)。

然后就会跳出这样的界面:

接着把里面的东西全删了,替换成:

{ 
    "cmd": ["g++", "${file}", "-std=c++20", "-o", "${file_path}\\\\${file_base_name}", "&", "start", "cmd", "/c", "${file_path}\\\\${file_base_name} & echo. & pause"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}",
    "selector": "source.c, source.c++", "shell": true,
    "encoding":"cp936", 

    "variants":
    [
        {
            "name" : "Build Only",
            "cmd":["g++", "${file}", "-std=c++20", "-o", "${file_path}\\\\${file_base_name}"]
        },
        {
            "name" : "Run Only",
            "cmd" : ["start", "cmd", "/c", "${file_path}\\\\${file_base_name} & echo. & pause"]
        },
        {
            "name" : "Pipe Build and Run",
            "cmd":["g++", "${file}", "-std=c++20", "-o", "${file_path}\\\\${file_base_name}","&","${file_path}\\\\${file_base_name}", "<","${file_path}\\\\in",">","${file_path}\\\\out"]
        },
        {
            "name" : "Pipe Run Only",
            "cmd" : ["${file_base_name}", "<","in",">","out"]
        },
        {
            "name" : "Project Build & Run",
            "cmd" : ["g++", "${file_path}\\\\*.cpp", "-std=c++20", "-o", "${file_path}\\\\project", "&", "start", "cmd", "/c", "${file_path}\\\\project & echo. & pause"]
        },
        {
            "name" : "Project Build Only",
            "cmd" : ["g++", "${file_path}\\\\*.cpp", "-std=c++20", "-o", "${file_path}\\\\project"]
        },
        {
            "name" : "Project Run Only",
            "cmd" : ["start", "cmd", "/c", "${file_path}\\\\project & echo. & pause"]
        }
    ]
}

然后按 ctrl+S 保存为 C++(Mingw).sublime-bulid (其实可以随便取,只要不是原来就有的并且你看得懂就可以)。

接下来回到主界面,新建文件,随便存一下,写一个代码,然后按 ctrl+B 编译,第一次会跳出来个面板,想这样:

C++(MinGW)(你刚刚存的名字,后面什么都不跟的那个),然后就会跳出黑框框,这就是和 DevC++ 一样的编译方式。

如果编译失败了的话有这些解决方法:

好了我们的基础设施就搞定了。

接下来就是进阶:

Step 4 自动爬取样例

接下来,我们要把 sublime 配置得像 jiangly(蒋老师)那样。

首先我们要下载一个 sublime 插件:叫 CppFastOlympicCoding

ctrl+shift+p 打开命令面板,然后输入 PCIP (Package Contrl: Install Package 的缩写) 然后点击 Package Contrl: Install Package

接着等他加载一会(用 magic 更快),等他跳出这个框:

接着输入 CppFastOlympicCoding 然后找到 CppFastOlympicCoding 点击他,左下角就会提示正在安装,接着再按 ctrl+shift+p 输入 PCLPPackage Contrl: List Package)如果有了刚安装的插件就说明安装成功。

然后我们要下载浏览器插件 Competitive Companion 这个需要用到谷歌商店,但它开不了。提供一个替代方法:

  1. 打开插件小屋;
  2. 搜索 Competitive Companion 选第一个下载,然后将 .crx 的后缀名改成 .zip 然后解压缩。
  3. 接着打开浏览器(这部分谷歌和 edge 是一样的)。
  4. 打开扩展管理,edge 要把以下两个选项打开:

  1. 然后点加载解压缩的扩展(谷歌应该是“加载未打包的扩展”),然后选择刚才解压的文件。

  1. 最后点击详细信息(谷歌“详情”)然后点击“扩展选项”(谷歌“扩展程序选项”),在第一个框输入 12345,然后关闭。

然后我们就完成了浏览器插件安装。

接下来我们安装 sublime 的插件 FastOylempicCodingHook

https://github.com/DrSwad/FastOlympicCodingHook/archive/refs/heads/master.zip

一样可以用刚才的方法下载解压。

接下来把他拖到 (你自己存的位置)\sublime_text_build_4200_x64\Data\Packages 目录下。

然后你就会发现他有个后缀 -master-master 删去。

然后我们的这两个东西就安装好了。接下来我们要改他的配置。

点击 Preferences(首选项)-> Package Settings(插件设置)-> CppFastOlympicCoding。

会跳出窗口:

接着在左边窗口最后的地方插入以下内容:

(上一行的内容),//要加一个逗号!!!
"tests_file_suffix": "__tests",

然后按 ctrl+s 保存关闭窗口。

接下来重启(最好是要)sublime 后打开你刚写的 A+B 程序,右击会出现新的 Listen to Competitive Companion 选项,点击它,就会等待浏览器插件爬取样例。

接着打开浏览器,打开 P1001,接着点你的插件,找到一个加号,然后把这个插件固定到工具栏(有固定就跳过):

接着点击工具栏中的加号:

然后回到 sublime 按 ctrl+alt+B 开始测样例:

右边就会有一个窗口跳出来,这就是测试样例的界面,可以按 alt+shift+1 退出分屏窗口。

:::warning{open} 每换一道题都得按照刚刚的爬取样例的操作做一遍不然你测的还是上一题的样例!!! :::

至此我们的便携版就安装完毕。

只安装便携版的朋友可以出门右拐走到头出门离开了!!! (^_^)

:::align{center} 版本之间分割线(别看了,没什么特别的) :::

Part 2. 复杂版(可携带,但是 debugger 会出问题似乎解决了问题)

先按照上面的配置配好 sublime。

接下来,你的sublime将会被爆改一通!!!

接下来,你的将会因为你家的网络而快乐!!!

接下来,我即将带领大家走进插件的世界!!!

Advanced version steps 1 安装 msys2、Clang、LLVM、clang

首先我们先不下载插件,先来安装一个 clang,当然 MinGW 得删(没装就算了,不删也行,留着备用),随后点击以下链接下载 msys2:https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/x86_64/msys2-x86_64-20250622.exe

下载后打开,按以下操作安装:

然后等他安装完就可以了,到 50\% 的时候会卡一下等他就完了,不然重开会崩。

接着安装完后直接点 Next 再点 Finish 就好了。

把弹出来的框关了。

打开你安装的 msys2 文件夹,打开目录下 etc 文件夹,然后再找到 pacman.d 打开,找到 mirrorlist.mingw32mirrorlist.mingw64mirrorlist.msys 三个文件然后操作以下内容:

mirrorlist.mingw32加入

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686

mirrorlist.mingw64加入

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64

mirrorlist.msys加入

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch

这三行是将是从清华镜像下载软件,速度会快很多。

接着回到 msys2 的主文件夹,打开 msys2.exe。

输入 pacman -Sy 同步软件包数据库:

输入 pacman -Su 更新软件包:

中间停止你就按 Y 然后回车,就可以了。

期间第二次让你按 Y 之后他会关掉,重新打开输入 pacman -Su 即可。

一样中间停止你就按 Y 然后回车。

然后是安装 clang:

一样打开 msys2.exe 输入:

pacman -S mingw64/mingw-w64-x86_64-make mingw64/mingw-w64-x86_64-gdb mingw64/mingw-w64-x86_64-clang

(强烈建议一个字符一个字符输,输错了就得重打一遍这条命令)

然后和上面一样等待安装完成。(这个很久)。

别急,先别管,还有 clangd,输入:

pacman -S mingw64/mingw-w64-x86_64-clang-tools-extra

一样的过程。

:::warning[注意]{open} 安装的时候如果异常退出那就是网络问题,重开 msys2.exe 应该就可以了。 :::

然后把 (你安装的路径)/msys64/mingw64/bin 的目录添加到 系统文件中。

接下来配置系统路径: 右击此电脑,点击属性,win 10 会跳出来这个界面:

然后点击 “高级系统设置” 打开如下界面:

点击环境变量:

点击上面Path,然后点上面的编辑:

然后出来这个:

点击新建,然后把(你安装的路径)/msys64/mingw64/bin 加进去,一直点确定退出。

:::success[确认安装]{open}

  1. 打开 cmd (命令提示符)
  2. 先验证 MinGW 安装,输入 g++ -v
  3. 然后验证 clang 安装,输入 clang -v
  4. 最后验证 clangd 安装,输入 clangd
  5. 如果报错了,诸如:"XXX 不是内部或外部指令",检查系统 Path 有没有配置好。 :::

终于完成第一步了!!!

Advanced version steps 2 将 cmd 集成进 sublime

首先打开 sublime,按 ctrl+shift+p 打开命令面板。

输入 PCIP 意思就不用解释了,然后点击 Package Contrl: Install Package

等他跳出插件列表,输入 terminus 回车(你放心,只有一个叫这个的插件):

等他安装完毕,接着我们打开他的设置:

把右边的东西改成:

{
    "256color": true,
    "brighten_bold_text": false,
    "theme": "chalk",
}

ctrl+s 保存退出

接着我们就可以按 ctrl+shift+p 输入 terminus 查看他的用途。

然后我们验证是否将 cmd 集成进 sublime,输入 terminus: ODST 然后选择 open default shell in tab 的选项。然后你就会发现 cmd 在 sublime 里面打开了,而且路径自动移到了当前目录下。

Advanced version steps 3 新建编译系统

然后我们就来新建编译系统。

我们建立一个文件夹,随便取一个名字:

比如我就叫 MyProject:

然后再目录下建一个 bin 文件夹,专门存 .exe 文件。

然后建立 code 文件夹,专门存代码。

然后建立(可以不建)in_out 文件夹,存输入输出文件。(用不上)

接着我们来搞一个编译系统:

同样的,删掉所有的,换成这个:

{
    // Windows

    // build only
    "shell_cmd": "clang++ -std=c++11 -g -Wall ${file} -o ${file_path}/../bin/${file_base_name}",
    // check the file name using regex
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    // set the encoding to utf-8
    "encoding": "utf-8",
    // doesn't matter if I use full path
    "working_dir": "${file_path}",
    // only C and Cpp files can use this sublime-build file
    "selector": "source.c, source.c++",
    "variants": [
        {
            // build and run in Terminus (sublime plugin)
            // [Recommanded]
            "name": "Run In Terminus",
            "target": "terminus_exec",
            "cancel": "terminus_cancel_build",
            "shell_cmd": "clang++ -std=c++11 -g -Wall \"${file}\" -o \"${file_path}/../bin/${file_base_name}\" && cmd /c \"${file_path}/../bin/${file_base_name}\""
        },
        {
            // build and run in CMD
            // you can type something in CMD then your progam can get its inputs
            // [Recommanded]
            "name": "Run in CMD",
            "shell_cmd": "clang++ -std=c++11 -g -Wall \"${file}\" -o \"${file_path}/../bin/${file_base_name}\" && start cmd /c \"\"${file_path}/../bin/${file_base_name}\" & pause \""
        },
        {
            // build and run in sublime
            // but you can't input anything to your progam
            "name": "Run in Sublime",
            "shell_cmd": "clang++ -std=c++11 -g -Wall \"${file}\" -o \"${file_path}/../bin/${file_base_name}\" && cmd /c \"${file_path}/../bin/${file_base_name}\""
        }
    ]
}

保存为 CPPBuilder.sublime-build

如果要改编译系统,把 -std=c++11 改成其他的即可(如 -std=c++03-std=c++98-std=c++14-std=c++17 等等,支持 c++20 和 c++23 以及 c++26)

接着我们将我们建立的文件夹拖进 sublime 里。

在 code 文件夹里建一个c++文件,接着写一份代码。

然后 ctrl+b 编译运行,第一次编译会让你选择编译方式:

Run In Terminus 就可以了。

如果有报错: clang++: error: linker command failed with exit code 1 (use -v to see invocation)

说明你没有在刚刚新建的文件夹里面新建文件,你需要在 MyProject 里面新建 c++ 文件。

处理方法:

ctrl+k+b 打开侧边栏,如果打不开说明你没有把建立的文件夹拖进 sublime 里,拖进去,然后点一下那个文件夹,就会自动展开,再点一下关闭,右击 code 文件夹,点击 New Folder...:

然后保存为 .cpp 后缀的文件就可以运行了。

Advanced version steps 4 配置 sublime 的 lsp 插件。

接着由于有些人用 Clion 用惯了,没有自动补全就很不习惯,所以我只能使用 sublime 的隐藏插件 LSP!!!(不许曲解意思)

然后老操作 ctrl+shift+p……PCIP 点击……输入 LSP 然后选择 LSP 安装:

然后你就会发现多了一个文件,你可以不管他。

接着安装 LSP-Clangd。(还有必要说过程吗?)

重启后就可以看到自动补全的效果了。

接着配置 LSP 打开 Settings:

接着在右边的窗口写入:

{
    // 在主页面只显示error红色下划线
    //"show_diagnostics_severity_level": 1,
    // 代码提示显示灯泡图标
    "show_code_actions": "bulb",
    // 保存时自动格式化
    "lsp_format_on_save": true,
}

第三行的自己选用。

保存退出。

然后打开 LSP-Clangd 的设置:

一样在右边输入:

{
    "initializationOptions": {
        // 启用clang-tidy代码检查,可能启用后warning会比较多,自己看着办吧
        "clangd.clang-tidy": true,
        // 美化clangd输出的JSON
        "clangd.pretty": true,
    }
}

如果不要就把那个选项改成 false 就可以了。

保存退出。

接下来我们要在建立的 (源文件目录)/code 目录下,建立新文件。(一样的方法)

然后写入一下内容:

---
Checks: "bugprone-*,\
google-*,\
misc-*,\
modernize-*,\
performance-*,\
readability-*,\
portability-*,\
"
HeaderFilterRegex: 'Source/cm[^/]*\.(h|hxx|cxx)$'
CheckOptions:
  - key:   modernize-use-default-member-init.UseAssignment
    value: '1'
  - key:   modernize-use-equals-default.IgnoreMacros
    value: '0'
  - key:   modernize-use-auto.MinTypeNameLength
    value: '80'
...

保存为 .clang-tidy 就可以了。

接着一样新建一个文件把这些贴进去:

---
# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
Language:        Cpp
BasedOnStyle:  WebKit
# 访问说明符(public、private等)的偏移
AccessModifierOffset: -4
# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
AlignAfterOpenBracket: Align
# 对齐数组列
AlignArrayOfStructures: None
# 连续赋值时,对齐所有等号
AlignConsecutiveAssignments: None
# 对齐连续位字段
AlignConsecutiveBitFields: None
# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations: None
# 对齐连续宏定义
AlignConsecutiveMacros: AcrossComments
# 逃脱换行(使用反斜杠换行)的反斜杠
AlignEscapedNewlines: Left
# 操作数对齐方式
AlignOperands:   Align
# 尾随的注释对齐
AlignTrailingComments: true
# 允许函数参数在一行
AllowAllArgumentsOnNextLine: true
# 允许函数声明的所有参数在放在一行
AllowAllParametersOfDeclarationOnNextLine: true
# 允许短的块放在同一行
AllowShortBlocksOnASingleLine: true
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: true
# 允许短的枚举放在同一行
AllowShortEnumsOnASingleLine: true
# 允许短的函数放在同一行
AllowShortFunctionsOnASingleLine: Empty
# 允许短的if语句保持在同一行
AllowShortIfStatementsOnASingleLine: false
# 允许短的匿名函数lamda表达式放在同一行
AllowShortLambdasOnASingleLine: Empty
# 允许短的循环while保持在同一行
AllowShortLoopsOnASingleLine: false
# 总是在返回类型后换行
AlwaysBreakAfterReturnType: None
# 总是在多行string字面量前换行
AlwaysBreakBeforeMultilineStrings: false
# 总是在template声明后换行
AlwaysBreakTemplateDeclarations: MultiLine
# 宏属性
AttributeMacros: ['__capability', '__output', '__ununsed']
# 表示函数实参要么都在同一行,要么都各自一行
BinPackArguments: true
# false表示所有形参要么都在同一行,要么都各自一行
BinPackParameters: true
# 位域冒号对齐方式
BitFieldColonSpacing : Both
# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效,设置其他配置则下面不生效
BraceWrapping :
  # class定义后面
  AfterClass: false
  # 控制语句后面
  AfterControlStatement:  false
  # enum定义后面
  AfterEnum:  false
  # 函数定义后面
  AfterFunction:  false
  # 命名空间定义后面
  AfterNamespace: false
  # ObjC定义后面
  AfterObjCDeclaration: false
  # struct定义后面
  AfterStruct:  false
  # union定义后面
  AfterUnion: false
  # catch之前
  BeforeCatch:  false
  # else之前
  BeforeElse: false
  # 缩进大括号
  IndentBraces: false
  # unknown:
  AfterCaseLabel:  false
  AfterExternBlock: false
  BeforeLambdaBody: false
  BeforeWhile: false
  SplitEmptyFunction: false
  SplitEmptyRecord: false
  SplitEmptyNamespace: false
# 在java字段的注释后换行
BreakAfterJavaFieldAnnotations: false
# 在二元运算符前换行
BreakBeforeBinaryOperators: None
# 在大括号前换行
BreakBeforeBraces: Custom
# 在concept前换行
# BreakBeforeConceptDeclarations: Never
# 在三元运算符前换行
BreakBeforeTernaryOperators: true
# 构造函数初始值设定项换行样式
BreakConstructorInitializers: BeforeColon
# 继承列表样式
BreakInheritanceList: AfterColon
# 字符串换行样式
BreakStringLiterals: false
# 每行字符的限制,0表示没有限制
ColumnLimit:     80
# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变
CommentPragmas:  '^ IWYU pragma:'
# 在新行上声明每个命名空间
CompactNamespaces: false
# 构造函数的初始化列表的缩进宽度
ConstructorInitializerIndentWidth: 4
# 延续的行的缩进宽度
ContinuationIndentWidth: 4
# 去除C++11的列表初始化的大括号{后和}前的空格
Cpp11BracedListStyle: true
# 继承最常用的换行方式
DeriveLineEnding: true
# 继承最常用的指针和引用的对齐方式
DerivePointerAlignment: false
# 关闭格式化
DisableFormat:   false
# 删除访问修饰符后的所有空行
EmptyLineAfterAccessModifier: Never
# 仅当访问修饰符开始一个新的逻辑块时才添加空行
EmptyLineBeforeAccessModifier: Never
# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)
ExperimentalAutoDetectBinPacking: false
# 自动补充namespace注释
FixNamespaceComments: false
# 需要被解读为foreach循环而不是函数调用的宏
ForEachMacros: ['RANGES_FOR', 'FOREACH']
IfMacros: ['IF']
# 多个#include块合并在一起并排序为一个
IncludeBlocks:   Merge
# 可以定义负数优先级从而保证某些#include永远在最前面
IncludeCategories:
  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
    Priority:        2
    SortPriority:    0
    CaseSensitive:   false
  - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
    Priority:        3
    SortPriority:    0
    CaseSensitive:   false
  - Regex:           '.*'
    Priority:        1
    SortPriority:    0
    CaseSensitive:   false
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
# 缩进访问修饰符
IndentAccessModifiers: false
# 缩进case标签
IndentCaseLabels: false
# case 标签后面的块使用与 case 标签相同的缩进级别
IndentCaseBlocks: false
# 向后兼容缩进外部块
IndentExternBlock: AfterExternBlock
# 缩进goto标签。
IndentGotoLabels: false
# 缩进预处理器指令
IndentPPDirectives: BeforeHash
# 缩进模板中的requires子句
IndentRequires:  false
# 缩进宽度
IndentWidth: 4
# 函数返回类型换行时,缩进函数声明或函数定义的函数名
IndentWrappedFunctionNames: false
#InsertBraces: true
# 插入尾随逗号
InsertTrailingCommas: None
# 保留JavaScript字符串引号
JavaScriptQuotes: Leave
# 包装 JavaScript 导入/导出语句
JavaScriptWrapImports: true
# 保留在块开始处的空行
KeepEmptyLinesAtTheStartOfBlocks: false
# 相对于 lambda 签名对齐 lambda 主体
LambdaBodyIndentation: Signature
# 开始一个块的宏的正则表达式
MacroBlockBegin: ''
# 结束一个块的宏的正则表达式
MacroBlockEnd:   ''
# 连续空行的最大数量
MaxEmptyLinesToKeep: 1
# 命名空间的缩进
NamespaceIndentation: All
ObjCBinPackProtocolList: Auto
# 使用ObjC块时缩进宽度
ObjCBlockIndentWidth: 4
ObjCBreakBeforeNestedBlockParam: true
# 在ObjC的@property后添加一个空格
ObjCSpaceAfterProperty: false
# 在ObjC的protocol列表前添加一个空格
ObjCSpaceBeforeProtocolList: true
# 缩进预处理器语句的列数
PPIndentWidth:   -1
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PenaltyIndentedWhitespace: 0
# 指针的对齐: Left, Right, Middle
PointerAlignment: Right
# 引用的对齐
ReferenceAlignment: Pointer
# 允许重新排版注释
ReflowComments:  true
#RemoveBracesLLVM: false
# 短命名空间跨越的最大展开行数
ShortNamespaceLines: 1
# 允许排序#include
SortIncludes:    CaseSensitive
# java静态导入放在非静态导入之前
SortJavaStaticImport: Before
# 对using声明排序
SortUsingDeclarations: true
# 在C风格类型转换后添加空格
SpaceAfterCStyleCast: false
# 在!后添加空格
SpaceAfterLogicalNot: false
# 在Template关键字后添加空格
SpaceAfterTemplateKeyword: true
# 不要确保指针限定符周围有空格
SpaceAroundPointerQualifiers: Default
# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 不在case冒号之前添加空格
SpaceBeforeCaseColon: false
# 不在C++11大括号列表之前添加空格
SpaceBeforeCpp11BracedList: false
# 在构造函数初始化器冒号之前添加空格
SpaceBeforeCtorInitializerColon: true
# 在继承冒号前添加空格
SpaceBeforeInheritanceColon: true
# 开圆括号之前添加一个空格
SpaceBeforeParens: ControlStatements
# 在基于范围的for循环冒号之前添加空格
SpaceBeforeRangeBasedForLoopColon: true
# 中括号前空格
SpaceBeforeSquareBrackets: false
# {}中间空格
SpaceInEmptyBlock: false
# 在空的圆括号中添加空格
SpaceInEmptyParentheses: false
# 在尾随的评论前添加的空格数(只适用于//)
SpacesBeforeTrailingComments: 2
# 在尖括号的<后和>前添加空格
SpacesInAngles:  true
# 在C风格类型转换的括号中添加空格
SpacesInCStyleCastParentheses: false
# 不在if/for/switch/while条件周围插入空格
SpacesInConditionalStatement: false
# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
SpacesInContainerLiterals: true
# 行注释开头允许有多少个空格。要禁用最大值,请将其设置为-1,除此之外,最大值优先于最小值
SpacesInLineCommentPrefix:
  Minimum:         1
  Maximum:         -1
# 在圆括号的(后和)前添加空格
SpacesInParentheses: false
# 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响
SpacesInSquareBrackets: false
# 标准
Standard:        Auto
# 在语句前面被忽略的宏定义,就好像它们是一个属性一样
StatementAttributeLikeMacros:
  - Q_EMIT
# 应该被解释为完整语句的宏定义
StatementMacros:
  - Q_UNUSED
  - QT_REQUIRE_VERSION
# tab宽度
TabWidth:        4
# 使用\r\n换行替代\n
UseCRLF:         false
# 使用tab字符:ForIndentation——仅将制表符用于缩进
UseTab:          Never
# 对空格敏感的宏定义
WhitespaceSensitiveMacros:
  - STRINGIZE
  - PP_STRINGIZE
  - BOOST_PP_STRINGIZE
  - NS_SWIFT_NAME
  - CF_SWIFT_NAME
...

以上是我自己的配置,可以自行更改。

然后保存为 .clang-format

接下来重启 sublime 之后,保存文件时或按 alt+shift+l 就可以按照设置自动格式化。

Advanced version steps 5 偏好设置

先开设置,Perfences --> Settings

然后把右边的东西换成:

{
    "font_size": 21,
    "ignored_packages": [
        "Vintage",
    ],
    // 设置tab的大小为4
    "tab_size": 4,
    // 使用空格代替 Tab
    "translate_tabs_to_spaces": true,
    // 使用默认字体 Monaco
    "font_face": "Monaco",
    // 失去光标自动保存
    "save_on_focus_lost": true,
    // 添加行宽标尺
    "rulers": [
        100
    ],
    // 显示空白字符
    "draw_white_space": "all",
    // 保存时自动去除行末空白
    "trim_trailing_white_space_on_save": "all",
    // 保存时自动增加文件末尾换行
    "ensure_newline_at_eof_on_save": true,
    // 默认编码格式
    "default_encoding": "UTF-8",
    // 不检查更新
    "update_check": false,
    // 把光标的样式从闪烁变成淡入淡出
    // 其余的选项还有"smooth", "phase", "blink", "wide", "solid".
    "caret_style": "phase",
    // 高亮当前行
    "highlight_line": true,
    // 增加行间距
    "line_padding_bottom": 1,
    "line_padding_top": 1,
    // 一直显示代码折叠箭头
    "fade_fold_buttons": false,
    // 排除这些文件夹,搜索和侧边栏都不会显示
    "folder_exclude_patterns": [
        "*.dSYM",
    ],
    // 排除这些文件,搜索和侧边栏都不会显示
    "file_exclude_patterns": [
        ".DS_Store",
        ".clang-format",
        ".clang-tidy",
    ],
}

接着打开键绑定设置,Perfences --> Key Bindings

将右边的改成:

[
    // LSP Format File (lsp's format)
    // "shift+alt+l"一键格式化全文件或者选中区域
    {
        "keys": [
            "shift+alt+l"
        ],
        "command": "lsp_format_document",
    },
    // LSP Run Source Actions
    // "shift+alt+enter" 显示代码提示
    {
        "keys": [
            "shift+alt+enter"
        ],
        "command": "lsp_code_actions",
        "context": [
            {
                "key": "lsp.session_with_capability",
                "operator": "equal",
                "operand": "codeActionProvider.codeActionKinds"
            }
        ]
    },
    // LSP Goto Definition
    // "F12"转到定义
    {
        "keys": [
            "f12"
        ],
        "command": "lsp_symbol_definition",
        "args": {
            "side_by_side": false,
            "force_group": true,
            "fallback": false
        },
        "context": [
            {
                "key": "lsp.session_with_capability",
                "operator": "equal",
                "operand": "definitionProvider"
            },
            {
                "key": "auto_complete_visible",
                "operator": "equal",
                "operand": false
            }
        ]
    },
    // Terminus
    // "F2"打开或关闭Terminus面板
    {
        "keys": [
            "f2"
        ],
        "command": "toggle_terminus_panel",
        "args": {
            "cwd": "${file_path:${folder}}"
        }
    },
]

OK,至此复杂版的基础配置就搞定了,但相比 CLion、VSCode 总感觉少了什么?

Advanced version steps 6 调试工具!!!

没错,没法 debug 啊!!!

msys2 有一个优点,可以下载 lldb 进行 debug。

还记得之前的那个 msys2.exe 吗?

打开他,输入 pacman -S mingw64/mingw-w64-x86_64-lldb

然后安装完成后即可。

接着我们就来安装 Debbuger 插件。

又是老操作:ctrl+shift+p……PCIP……输入debugger 找到 debugger (注意前面啥也没有)安装。

打开命令面板,输入 debugger: open 接着就看他跳出来了这样的窗口:

点击 Save Project As... 然后保存为文件名即可。

接着我们来下载 lldb 的适配器。

过程中要用到 this加速器

等他下完,其实刚刚的也可以用,就是不稳定,时间嘛,你知道的~

打开界面大概长这样:

图片里一串红色的报错不用管,我操作失误了

然后点击 Add Config... 等他一下,跳出来的框中点击 Install Adapter,在再次跳出来的框中找到 lldb:

如果长这样: 那么再试一次,如果是这样: 那么恭喜你可以下载了,点它!

然后他就会在下面说明:

◇ Installing lldb

接着我们就看他会不会报错:如果报错:

◆ Failed: Unable to perform request (<urlopen error [WinError 10054] 远程主机强迫关闭了一个现有的连接。>) (https://api.github.com/repos/vadimcn/vscode-lldb/releases)

◆ Failed: Unable to perform request (<urlopen error _ssl.c:1114: The handshake operation timed out>) (https://api.github.com/repos/vadimcn/vscode-lldb/releases)

那么恭喜你,获得重新操作一遍的大礼,如果没有报错这个,那么说明你家的网很好。

如果是这样:

◇ Installing lldb
    Downloading https://github.com/vadimcn/codelldb/releases/download/v1.10.0/codelldb-x86_64-windows.vsix

那就很 ok 了。

接着他就得下载亿会儿。

如果他中途又报错了(但凡是红色字的就是报错),那么恭喜你,还得再下一遍 ^_^ 。

所以我下载了几遍也没成功

如果有这样:

就是成功了,中间他可能会连接超时,文件错误,403,502,503,拒绝连接,一堆错误,如果你网速足够就不会。

下载成功后再点击 Add config... 接着点击 Add Configuration

点击 lldb 点击第一个:

就可以了。

其实这一步就是往 .sublime-project 文件里加了一行东西而已,然后接下来他就得被我们爆改了。

接下来打开 .sublime-project 文件,然后直接全删了,换成这个:

{
    "folders": [
        {
            "path": "."
        },
    ],
    "debugger_tasks": [
        {
            // 用Clang编译
            "name": "CompileWithClang",
            "working_dir": "${file_path}",
            "shell_cmd": "clang++ -std=c++11 -g '${file}' -o '${file_path}/../bin/${file_base_name}'",
            "file_regex": "(..[^:]*):([0-9]+):([0-9]+)?:? error: (.*)",
        },
        {
            // 用GCC编译
            "name": "CompileWithGCC",
            "working_dir": "${file_path}",
            "shell_cmd": "g++ -std=c++11 -g '${file}' -o '${file_path}/../bin/${file_base_name}'",
            "file_regex": "(..[^:]*):([0-9]+):([0-9]+)?:? error: (.*)",
        },
    ],
    "debugger_configurations": [
        {
            // 在Terminus窗口运行程序,使用GDB调试
            "name": "C++ GDB (Terminus)",
            "type": "gdb",
            "request": "launch",
            // Debug之前先用GCC编译一波
            "pre_debug_task": "CompileWithGCC",
            // bin目录下的可执行文件
            "target": "${file_path}/../bin/${file_base_name}",
            "cwd": "${project_path}",
            "terminal": "external",
            "valuesFormatting": "parseText"
        },
        {
            "name": "C++ GDB (Attach)",
            "type": "gdb",
            "request": "attach",
            "target": "${command_pick_process}", // sublime text 4 only
            "cwd": "${folder}",
            "valuesFormatting": "parseText"
        },
        {
            // 在Terminus窗口运行程序,使用LLDB调试
            "name": "C++ LLDB (Terminus)",
            "type": "lldb",
            "request": "launch",
            // Debug之前先用Clang编译一波
            "pre_debug_task": "CompileWithClang",
            // bin目录下的可执行文件
            "program": "${file_path}/../bin/${file_base_name}",
            "cwd": "${project_path}",
            // 使用外部终端运行程序(默认是Terminus)
            "terminal": "external",
        },
        {
            "name": "C++ LLDB (Attach)",
            "type": "lldb",
            "request": "attach",
            "pid": "${command_pick_process}" // sublime text 4 only
        },
    ],
}

然后接着点 Add Config... 接着就会出现这样的界面:

点击 C++ LLDB (Terminus) 即可进行调试。

最后打开 Tools -> Debugger -> Settings,插入:

{
    // 开sublime不自动启动debugger
    "open_at_startup": false,
    // 设置为sublime的默认字体,后面会装这个。
    "font_face": "JetBrains Mono",
    // 字体改小一些
    "ui_scale": 14,
    // 自动决定是否显示汇编代码
    "lldb_show_disassembly": "auto",
    "integrated_output_panels": {
        "integrated_output_panels": {
            "diagnostics": {
                "name": "Diagnostics",
            },// 代码诊断并入debugger界面
            "Terminus": {
                "name": "Terminal",
                "position": "bottom"
            }// Terminus终端并入debugger界面
        }
    }
}

到这里,所有基础配置都好了。

但是,好像少了什么……

Part 3. 美化

Step 1 字体:

字体比较好看的就是 Fria CodeJetbrains Mono (用的是加速链接,用不了的话就用 Fria Code 和 Jetbrains Mono 这两个下)

将压缩包解压后打开 ttf 文件夹(Jetbrains Mono 的 ttf 文件夹在 fonts 目录下)全选所有文件,然后右键点击“安装”安装字体。

然后打开 sublime 的设置: Prefences(首选项) -> Settings(设置) 然后将 "font_face": "XXXXX", 的改成 "font_face": "Fira Code","font_face": "JetBrains Mono", 保存关闭即可。(本来还得改 debugger 的,但是其实不用,他默认会跟随设置)

Step 2 透明

安装 Transparency 插件(过程不讲力)

使用:ctrl+shift+(1~6) 来改变透明度,数字越大越透明。

Step 3 UI

先安装 A File Icon 美化侧边栏图标。

有几个插件好用:

自己安装 \tao

食用方法:

Step 4 括号高亮匹配

安装 BraketHightLighter 插件后,Preferces -> Package Settings -> BraketHightLighter -> Brakert Settings 中我的配置如下:

{
    "search_threshold": 10000,
    "bracket_styles": {
        "default": {
            "icon": "dot",
            "color": "region.yellowish brackethighlighter.default",
            "style": "highlight"
        },
    },
}

比较好看,要更改自行上网查找教程。

Step 5 讲些有用的

插件推荐:

番外:论如何移动 sublime

便携版移动后配置系统文件即可用。

复杂版则需要重新下 debugger 的适配器,并重配系统文件。

最终成果

\tiny \texttt{ (这张照片没有反映本人真实马蜂) }

:::align{center} 结束了,终于还没结束!!! :::

问题解决 Q&A

::::warning[package contrl 选项没力] 就是:

::::

::::success[解决方法] 参考这篇文章 ::::