【重制】如何在 NOI 系列比赛中使用 Sublime Text

· · 科技·工程

【重制】如何在 NOI 系列比赛中使用 Sublime Text

两年前的文章:如何在 NOI linux 中优雅地使用 Sublime Text

现在搞一个重置版。

Sublime Text 是一个强大文本编辑器。

是一个付费软件,但可以无限试用(喜

NOI Linux 2 默认安装。

首先在 NOI Linux 里找到这个橙黑配色的软件,打开。

然后应该会显示滚木:

然后直接在里面写代码,这时候会发现没有高亮,这是因为 sublime text 不知道你在写什么语言。

高亮显示

方法一

点击右下角,切换成 c++

方法二

保存为 cpp 后缀的文件,sublime text 就知道这是 c++ 了,直接高亮。

方法三

Ctrl + Shift + P 调出工具栏,输入 c++,选择 Set Syntax: C++

然后就能写代码了!

代码功能很多,这里不多赘述,可以看百度百科。

运行代码

写好代码后怎么运行呢?

方法一:命令行

命令行里编译运行:

不会 gcc 的话也是可以百度百科。

这样的话比较安全,加上了 -std=c++14 -O2 与评测保持一致。

方法二:Sublime Text 默认编译

Tools -> Build 里面,也可以使用快捷键 Ctrl + Shift + B,一个是编译,一个是编译加运行。

但是这种方法不能加编译命令 -std=c++14 -O2 不是很安全。

方法三:自定义构建系统。

我们就要更改其默认的编译指令,但是不能直接更改,需要建一个新的。

进入 Sublime Text 安装目录中的包文件夹 /opt/sublime_text/Packages 默认编译就在这里面。

找到 C++.sublime-package,复制出来,并解压,找到 C++ Single File.sublime-build,这个就是编译文件。

然后点击 Tools -> Build -> New Build System,会弹出来一个文件,把 C++ Single File.sublime-build 粘贴进去,加入自定义编译和命令:

{
    "shell_cmd": "g++ \"${file}\" -O2 -std=c++14 -o \"${file_path}/${file_base_name}\"",
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c++",

    "variants":
    [
        {
            "name": "Run",
            "shell_cmd": "ulimit -s 114514 && g++ \"${file}\" -O2 -std=c++14 -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""
        }
        ,
        {
            "name": "Debug",
            "shell_cmd": "g++ \"${file}\" -g -O2 -std=c++14 -o \"${file_path}/${file_base_name}\""
        }
    ]
}

然后保存为 g++.sublime-build

然后 Ctrl + Shift + B 就有新的自定义编译了。

其中,在 Sublime Text 里编译的话能在对应的行显示 Error 和 Warning。

然后注意一下 Sublime Text 里面的命令行里输入流有问题,推荐文件读写!

视图

Alt + Shift + 2 能分出两个代码区域:

Alt + Shift + 3 是分三个,Alt + Shift + 4 是分四个(1x4),Alt + Shift + 5 也是是分四个(2x2),Alt + Shift + 1 是初始状态一个。

同时,分出两个后在右边进行 Ctrl + K , Ctrl + up 还能分:

这时候就能左边代码,右边是 in 和 out。

有关 sublime text 的考场技巧就差不多了,

其他就是一些 sublime text 和 linux 的使用问题。

在 sublime text 上面的工具栏可以发现有很多功能,和对应的快捷键。

Ctrl + Shift + P 快捷调用各种命令。

神秘功能 Find in Files

Ctrl + Shift + F 调出 Find in Files,可以在一个目录里搜索。

比如考场上忘记了 tree 怎么写,就可以:

而且这个速度极快。

神秘快读

忘记快读怎么办?

键入 read,然后就能发现补全里有个模板 Read File Into Vector

std::vector<char> v;
if (FILE *fp = fopen("filename", "r"))
{
    char buf[1024];
    while (size_t len = fread(buf, 1, sizeof(buf), fp))
        v.insert(v.end(), buf, buf + len);
    fclose(fp);
}

这个有点废空间,可以稍作修改,比如:

namespace IO {
    char buf[1024], * p1 = buf, * p2 = buf;
    inline char gc() {
        if(p1 == p2) {
            p2 = buf + fread(buf, 1, sizeof buf, stdin);
            p1 = buf;
        }
        return p1 == p2 ? EOF : * p1 ++;
    }
}

(修改的貌似有点多(至少知道 fread 怎么用了吧