Re:从零开始教你使用 Sublime Text


目录
  • https://www.sublimetext.com

    官网界面

    直接点击中间的 “DOWNLOAD” 按钮即可。或者可以点击右上角 “Download”下载不同版本。

    Download

    可以发现 windows 有一个便携版本。下载之后是一个 .zip 文件,解压后可以直接使用,且可以放在 U 盘里。

    界面

    下载好之后长这个样子。

    没有汉化看不懂设置怎么办?可以先前往 3-1.汉化插件 安装汉化。

    1-1.有用的快捷键和特性们

    基本的快捷键,如 Ctrl+N,Ctrl+S 之类的和其他编辑器类似,不再赘述。

    其他的有 Ctrl+G,Ctrl+P,Ctrl+R 分别为定位到某一行,某一文件,某一函数或结构体。

    Ctrl+D 可以选中下一个与当前选中的词相同的词,"Ctrl+K"+"Ctrl+D" 可以跳过当前这个。

    Alt+F3 可以同时选中所有与当前选中的词相同的词,效果相当于长按 Ctrl+D。

    在不选中文本时 Ctrl+C,Ctrl+X,Ctrl+V 为复制、剪切、粘贴当前行。

    Ctrl+Shift+M 选中当前括号内的内容。

    按住 Ctrl 的同时用鼠标点击可以开启多光标模式。

    按住鼠标滚轮可以进行矩形选择。

    Ctrl+Enter 可以直接在当前行后插入一行。Ctrl+Shift+Enter 可以直接在当前行前插入一行。

    Ctrl+Shift+[ 折叠代码。Ctrl+Shift+] 展开代码。

    Ctrl+上/下 相当于滚轮。

    Ctrl+] 在当前行添加一个缩进。Ctrl+[ 在当前行减少一个缩进。

    Ctrl+Shift+上/下 可以将当前行往上/下移。

    Ctrl+单击标签 可以同时显示多个文件。

    按 Ctrl+F 后左侧的六个图标分别对应:是否使用正则表达式、是否区分大小写、是否查找完整的词、是否循环(即在查找完最后一个后查找第一个)、是否仅查找选中部分、是否高亮显示被查找到的文本。

    等等。

    1-2.各部分功能介绍

    Sublime 的界面大概可以分成四部分。

    1-2-0.代码编辑区

    即为图中绿色框框内的部分。

    中间编辑代码,上方是标签栏,可以切换文件。当标签栏文件过多时标签会叠在一起,此时可以在标签栏使用滚轮或点击左侧两个箭头使得你需要的文件显示出来。

    标签栏1

    右侧的加号可以新建文件,向下的箭头点一下可以显示打开的文件。

    标签栏2

    中间右侧是略缩图和滚动条,略缩图也有和滚动条一样的拖动功能。

    可以分屏,快捷键是 Alt+Shift+1~9,或者可以点击菜单栏 View->Layout 进行更改。

    分屏

    效果如图:

    效果

    1-2-1.侧边栏

    即图中蓝色方框内部分。

    当你把若干个文件夹拖动到 Sublime 内后,侧边栏就会显示这些文件夹,方便管理文件。侧边栏可以通过快捷键 "Ctrl+K"+"Ctrl+B" ,或者点击底栏最左侧图标,或者点击菜单栏的 View->Side Bar->Hide Side Bar 来打开或关闭。

    同时,你也可以点击菜单栏 View->Side Bar->Hide Open Files 使得侧边栏显示/隐藏打开的文件。

    1-2-2.底栏

    即图中红色方框内部分。

    左键单击最左侧图标可以显示/隐藏侧边栏,右键后会出现若干选项,分别为打开控制台、搜索、在文件夹中搜索、替换。打开搜索等之后可以按 Esc 或者右键图标选择 Hide Panel 来关闭它。

    右侧为第一个为缩进格式,点击之后可以切换。

    最右侧为语法高亮,点击可以切换高亮语法。Sublime 也会根据打开的文件的后缀名来自动切换高亮语法。

    1-2-3.菜单栏

    东西太多,所以这里不展开讲,可以自行探索,或者在后面的配置中了解其功能。

    1-3.命令面板

    按快捷键 Ctrl+Shift+P 可以调出命令面板,按 Esc 关闭。

    可以在命令面板中输入一些东西,它自动和可以执行的命令匹配,没必要输整个命令,比如 UI: Select Color Scheme 可以直接输入 Color Scheme 来匹配到。找到对应的命令之后敲一下回车或者用鼠标点击一下即可。

    这个东西在后面有大用处,故先说明一下。

    1-4.更改主题和配色方案

    这里先讲一下,Sublime 的“主题”分为主题和配色方案两部分,配色方案主要为代码编辑区的语法高亮和背景色。而主题则为其他区域的。

    更改配色方案可以点击菜单栏 Preferences->Select Color Scheme 或者在命令面板中输入 UI:Select Color Scheme,然后切换。

    更改主题可以点击菜单栏 Preferences->Select Theme 或者在命令面板中输入 UI:Select Color Scheme,然后切换。

    可以发现 Sublime 已经预装了五个配色方案和三个主题。

    其中 Adaptive 主题的颜色会跟着配色方案的背景改变而改变。

    配色方案和主题都有 Auto 选项,选择后它会让你继续选择 Light 的方案和 Dark 的方案。之后他会根据你系统的颜色来决定使用 Dark 还是 Light。

    1-5.设置

    点击菜单栏 Preferences->Settings 可以打开设置。发现长这个样子:

    设置

    Sublime 几乎所有设置都是这个样子,为 .json 文件,左侧是默认设置,一般为只读文件(就算不是只读也千万不要去更改他!),右侧是用户设置,更改设置一般在右侧进行。

    具体每个设置是什么可以看注释,这里稍微提一下主要会用到的几个:

    • font_face:字体
    • font_size:字号,值为 \(1\sim128\) 之间的整数,默认为 10
    • font_options:字体选项,值为字符串数组,可以用来进行字体的其他设置。
    • highlight_line:高亮当前行,为布尔类型,默认为 false
    • auto_complete:自动补全,为布尔类型,默认为 true
    • spell_check:拼写检查,为布尔类型,默认为 false

    1-6.快捷键设置

    点击菜单栏 Preferences->Key Bindings 来设置快捷键。格式大概可以参照左侧默认设置?不会用也没关系,只要知道是一个中括号,里面用大括号包住,每个大括号后面加一个逗号这样的形式就够了,后面我认为需要自己设置快捷键的地方会提怎么搞的。或者有什么需求也可以底下回复或者私信我。

    2.编译运行 C++ 程序

    首先 Sublime 自身可以直接编译运行程序,方法是按快捷键 Ctrl+B 或者点击菜单栏 Tools->Build。另外,也可以在 Tools->Build System 选择编译系统。还可以按快捷键 Ctrl+Shift+B 或者点菜单栏 Tools->Build With 选择用什么编译。运行结束后会在控制台中显示结果和运行时间。
    编译

    运行结果

    但是自带的编译有一个问题,就是无法输入。如果你写一个 A+B,你会发现无法在下方的控制台中输入任何字符。

    解决方法有两种,一种是自己新建一个编译系统,一种是安装 CppFastOlympicCoding 插件。第二种方法可以查看 3-6.CppFastOlympicCoding。这里提一下第一种方法。

    首先点击菜单栏 Tools->Build System->New Build System,然后在打开的界面中就可以自己写一个编译系统。具体的格式为:

    {
        "命令行类型": "命令",
        "file_regex": "一个正则表达式,用于显示编译错误信息",
        "working_dir": "执行命令的目录",
        "selector": "适用范围",
        "encoding": "编码",
        "variants"://其他变体
        [
            {
                "name": "名称",
                "命令行类型": "命令"
            },
            //...
        ]
    }
    

    其中 variants 并不是必要的。

    具体如何使用?举个例子,这是我在 windows 下使用的编译系统:

    {
        "cmd": ["cmd","/c","g++","-Wall","-std=c++14","-O2","${file}","-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++",
        "encoding": "cp936"
    }
    

    windows 下的命令行为 cmd,所以第一行为 "cmd": ,后面的命令可以是一个字符串,也可以是字符数组。其中 ${file} 为当前文件的地址,${file_path} 为目录,${file_base_name} 为文件去掉后缀的名称。举例来说,如果我的编译对象是 C:\Users\[数据删除]\Desktop\a.cpp,那么 ${file} 对应的就是 'C:\Users\[数据删除]\Desktop\a.cpp'${file_path} 就是 C:\Users\[数据删除]\Desktop${file_base_name} 就是 a。所以例子第一行的意义就是用 g++编译当前文件并在 cmd 中运行可执行文件,并在运行结束后执行 echo.$pause 命令。其效果相当于 DevC++ 中的编译运行。需要注意这里不能写成 "cmd /c g++ -Wall -std=c++14 -O2 ${file} -o ${file_path}/${file_base_name} && start cmd /c ${file_path}/${file_base_name} & echo.&pause",因为会出现两个 & 之间的优先级错误。

    例子的第二行用于显示编译错误,效果如下:

    CE

    主要效果是显示中间的红框,如果去掉这句话则只会在控制台中显示错误信息。

    关于为什么正则表达式是 ^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$?其实是用来匹配错误信息的。

    前面两个 .. 匹配了 C:,然后 [^:]* 往后一直匹配到第一个冒号前,所以在上图中 (..[^:]*) 匹配了 D:\0-mine\az.cpp。然后 :([0-9]+):?([0-9]+)?:? 匹配了行号和列号,即图中的 :12:28:,之后一个空格一直匹配到末尾,即为具体的错误信息 error: expected ';' before 'printf'

    第三行 working_dir 表示要执行命令的位置,"working_dir": "${file_path}" 相当于在当前文件目录中执行该命令。

    第四行 selector 表示这个编译系统的适用范围,格式为 source.后缀,如我要给 C++ 程序使用则为 source.c++。当没有填写时则默认范围为所有文件。

    最后一行是编码,用于显示和匹配错误信息。一般为 utf-8 或者 cp936。如果你发现编译错误时没有红框,可能是你编码填错了。

    这个编译运行 C++ 程序的方法是不需要装插件的,所以考场上你也可以使用。而且可以进一步精简。

    可以发现 ${file} 对应的是绝对地址,所以 working_dir 在这里其实是没有必要的,可以省略。selector 也可以省略,所以简化之后只剩下三行代码:

    {
        "cmd": ["cmd","/c","g++","-Wall","-std=c++14","-O2","${file}","-o","${file_path}/${file_base_name}","&&","start","cmd","/c","${file_path}/${file_base_name} & echo.&pause"],
        "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
        "encoding": "cp936"
    }
    

    第一行为普通的命令,第二行和第三行在理解后也不难背,所以完全可以在考场上使用。

    附:Ubuntu 下可用的编译运行 C++ 的编译系统:

    {
        "shell_cmd": "g++ -Wall -O2 '${file}' -o '${file_path}/${file_base_name}' && gnome-terminal -- bash -c \"time '${file_path}/${file_base_name}'; read -p 'Press any key to continue...'; exit; exec bash\"",
        "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
        "working_dir": "${file_path}",
        "selector": "source.c, source.c++",
        "encoding":"cp936",
    }
    

    读者可以根据上面的解释以及自己的习惯去定制适合自己的编译系统。

    写完之后按 Ctrl+S 在默认的目录(即 C:\Users\[数据删除]\Appdata\Roaming\Sublime Text\Packages\User)中保存为 .sublime-build 即可使用。

    效果:

    RRRRRRRRRRRRUN

    3.插件

    3-0.如何安装插件

    首先打开命令面板,输入 Install Package Control 以下载包管理器。安装成功后会有这样一个弹窗:

    InstallPackageControl

    如果上面的字不一样那大概是安装失败了,十有八九是网络问题,多试几遍即可。

    装完之后,再打开命令面板输入 Package Control: Install Package ,此时左下角会出现这样的文字:

    Loading repositories

    之后会再次跳出命令面板,此时上面显示的是各个插件的名称,简介,以及一个链接(是可以点的),可以直接输入要安装的插件的名字来安装插件。插件安装好后一般会跳出这个插件的信息(Package Control Message)。

    package

    安装完插件后可以在菜单栏 Preferences->Package Settings 中找到对应的插件设置。

    另外 Package Control: List PackagesPackage Control: Remove Packages 命令可以显示已安装的插件和删除插件。

    这里再讲一个网站:https://packagecontrol.io/

    这个网站收集了所有 Sublime 的插件,可以从中获得 Sublime 各个插件的信息。

    接下来会介绍一些个人认为比较有用的插件。

    3-1.汉化插件

    插件的名称为 ChineseLocalizations。安装好后过一会就汉化好了。可以点击菜单栏 帮助->Language 来切换语言。

    3-2.美化插件

    好了知道你们都是颜控了。

    3-2-0.A File Icon

    项目地址:GitHub - SublimeText/AFileIcon: Sublime Text File-Specific Icons for Improved Visual Grepping

    相信大家已经发现了,默认的 Sublime 的侧边栏的文件图标非常丑:

    Before

    而这个插件可以优化文件图标:

    After

    如果刚下载好后图标没了可以重启一下。

    3-2-1.Transparency

    项目地址:GitHub - vhanla/SublimeTextTrans: A Sublime Text 2 & 3 Plugin to set the application opacity on Windows

    Windows 专属。可以使窗口透明化,快捷键是 Ctrl+Shift+1~6,对应不同的透明度。可以在设置中调整各个等级的透明度。

    3-2-2.RainbowBrackets

    项目地址:GitHub - absop/RainbowBrackets: A rainbow brackets plugin for SublimeText4.

    彩虹括号。就是让括号渲染成彩色。不过需要调下设置。

    默认设置长这样:

    {
        "debug": false,
    
        "default_config": {
            "bracket_pairs": {
                "(": ")",
                "[": "]",
                "{": "}"
            },
    
            "coloring": false,
    
            "enabled": true,
    
            "ignored_scopes": [
                "comment",
                "string",
                "constant"
            ],
    
            "rainbow_colors": [
                "#FF0000", // level0
                "#FF6A00", // level1
                "#FFD800", // level2
                "#00FF00", // level3
                "#0094FF", // level4
                "#0041FF", // level5
                "#7D00E5"  // level6
            ],
    
            "mismatch_color": "#FF0000"
        },
    
        "syntax_specific": {
            "Bash": {
                "coloring": false,
    
                "ignored_scopes": "keyword"
            },
    
            "JSON": {
                "bracket_pairs": {
                    "{": "}",
                    "[": "]",
                },
    
                "extensions": [
                    ".json",
                    ".sublime-settings",
                    ".sublime-menu",
                    ".sublime-build",
                    ".sublime-keymap",
                    ".sublime-commands",
                    ".sublime-theme",
                    ".sublime-color-scheme"
                ],
    
                "ignored_scopes": [
                    "comment", "string"
                ]
            },
    
            "Regular Expression": {
                "extensions": [
                    ".sublime-syntax"
                ],
    
                "ignored_scopes": [
                    "meta.set.regexp",
                    "constant"
                ]
            },
    
            "Scheme": {
                "bracket_pairs": {
                    "(": ")",
                    "[": "]",
                },
    
                "extensions": [
                    ".scm",
                    ".ss"
                ],
    
                "ignored_scopes": [
                    "comment", "string", "constant"
                ]
            }
        }
    }
    

    bracket_pairs 是要匹配的括号,ignored_scopes 是不需要的匹配的范围,rainbow_colors 是括号颜色设置,mismatch_color 是未匹配括号的颜色,extensions 是适用的文件的后缀。

    对于 OIer 来说,只需要将 JSON 里面的 bracket_pairs 里加上 "(": ")",,并且在 JSONextensions 里加上 ".cpp" ,再根据自己的喜好调整 rainbow_colorsmismatch_color 即可。

    另外还可以使用 RainbowBrackets: Make Rainbow 命令加载彩虹括号,RainbowBrackets: Clear Rainbow 取消彩虹括号渲染。

    这个插件还内置了一些快捷的括号修改操作,具体的可以去看 README。

    3-2-3.BracketHighLighter

    项目地址:BracketHighlighter - BracketHighlighter Documentation (facelessuser.github.io)

    优化高亮显示当前所在的括号。

    建议使用此插件时禁用 Sublime 自带的括号匹配(不禁用也没啥关系),方法是在设置中加上 "match_brackets": false,

    默认设置下并不明显,所以需要改下设置。

    发现这个设置文件非常长,所以直接弃疗。

    实际有用的设置大概是这几个:

    • \(700\) 行的 style,为 underline 时使用的是下划线高亮,为 highlight 时使用的是方块高亮。
    • \(706\sim756\) 行,分别为各种括号匹配的高亮颜色和图标,也可以单独更改高亮样式,方法是在内部添加 style: "..."

    3-2-4.主题+配色方案:Material Theme

    项目地址:Material Theme - The most epic theme for Sublime Text (equinusocio.github.io)

    Material Theme

    3-2-5.主题+配色方案:ayu

    项目地址:GitHub - dempfi/ayu: ???????? Modern Sublime Text theme

    ayu

    3-2-6.主题+配色方案:Theme - Spacegray

    项目地址:Spacegray — A Hyperminimal UI Theme for Sublime Text

    Spacegray

    3-2-7.主题+配色方案:One

    项目地址:[Theme - One - Packages - Package Control](https://packagecontrol.io/packages/Theme - One)

    主题的颜色会根据配色方案的改变而改变。

    One

    3-2-8.配色方案:Dark Knight Color Scheme

    项目地址:[Dark Knight Color Scheme - Packages - Package Control](https://packagecontrol.io/packages/Dark Knight Color Scheme)

    看起来和 One Dark 差不多,但是更“亮”一些。

    DarkKnight

    3-2-9.配色方案:Darcula Color Scheme

    项目地址:Dracula — Dark theme for 280+ apps (draculatheme.com)

    Darcula

    3-2-10.主题+配色方案:Guna

    项目地址:GitHub - poucotm/Guna: ???? Most Innovative Theme for Sublime Text

    重点题一嘴,因为是我现在正在用的,用着很舒服的主题。

    主题的颜色会根据配色方案的颜色而变化。

    侧边栏上方会显示日期/时间/天气,日期/时间的颜色表示当前文件的状态(默认情况下红色为未保存,蓝色为已保存,灰色为只读),可以自行调整。也可以像 Material Theme 一样微调主题。设置分别在 首选项->Package Settings->Guna->Settings/Dark theme settings/Light theme settings。具体的可以去看 README。

    Guna

    3-3.Terminus

    项目地址:Terminus - Packages - Package Control

    在 Sublime 中内置命令行。可以更改命令行的配色。可以选择在底部控制台或者新的标签页打开命令行,方式为输入 Terminus: Open Default Shell in PanelTerminus: Open Default Shell in Tab (View) 命令。其他具体操作详见官网。

    3-4.Typewriter

    项目地址:GitHub - alehandrof/Typewriter: Typewriter-inspired modes for Sublime Text 3

    为 Sublime 提供了两种新的打字模式,分别为当前行居中和强制在最后一行。

    3-5.Origami

    项目地址:GitHub - SublimeText/Origami: Split the window however you like! Create new panes, delete panes, move and clone views from pane to pane.

    优化了 Sublime 的分屏,装了这个插件后可以:

    • 按 "Ctrl+k"+"方向键" 在相邻窗格中移动。
    • 按 "Ctrl+k"+"Shift+方向键" 将当前文件移动到相邻窗格。
    • 按 "Ctrl+k"+"alt+方向键" 将当前文件克隆到相邻窗格。
    • 按 "Ctrl+k"+"Ctrl+方向键" 创建一个新的窗格。
    • 按 "Ctrl+k"+"Ctrl+Shift+方向键" 删除一个窗格。
    • 按 "Ctrl+k"+"Ctrl+Alt+方向键" 创建一个新的窗格并将当前文件移动到新的窗格。

    记不住快捷键?也可以 右键->Origami 进行操作。

    3-6.CppFastOlympicCoding

    项目地址:GitHub - Jatana/FastOlympicCoding: Tools for competitive programming for Sublime Text 3 & 4

    专为 OIer 打造的插件。功能丰富,包括:

    • 像 CP Editor 一样输入样例进行测试。
    • 对拍。
    • 更好的自动补全。
    • 实时显示错误信息。
    • Debug。(仅限 MacOS)

    输入样例操(wo)作(lan)复(de)杂(jiang)建议直接点链接进去看。这里就稍微提一嘴对拍功能。

    首先如果你要对拍的文件为 A.cpp,那么你还要创建两个文件 A__Good.cppA__Generator.cpp,分别为暴力程序和数据生成器。然后输入 FastOlympicCoding: Make Stress 就可以开始对拍。输入 FastOlympicCoding: Stop Stress 停止对拍。

    3-7.Vintage

    项目地址:不知道。

    这个屑快写完了才想起来这个插件。

    下载完包管理器(PackageControl)之后自带的插件,可以使 Sublime 开启 Vim 模式。不过默认为禁用状态。开启的方法从设置中的 ignored_packages 删除它。

    4.后记

    没想到这篇文章这么快就写完了啊……希望能对大家有帮助喵~

    谢谢你看到最后。

    5.参考

    • Package Control - the Sublime Text package manager
    • 各个插件的项目地址。
    • sublime text3关于c/c++方面的配置和插件 - 不败丶流逝 的博客 - 洛谷博客 (luogu.org)
    • https://www.luogu.com.cn/paste/oewqj0hg