跳转至

Sublime Text

簡介

Sublime Text(以下簡稱 ST,後附數字作為版本區分,如無則各版本都適用)是一款輕量級的文本編輯器,支持多種語言的語法高亮及代碼補全。具有高度的可拓展性以及 Vim 模式,特別的熱啓動模式大幅減小了文件丟失的可能。

新版 NOI Linux 中支持版本為 ST3 最後一個版本 3.2.21,故這裏以 ST3 為主。目前 ST4 正式版已經發布2,現在如仍使用 ST3 會提示更新。

ST4 與 ST3 的重要差別會有額外補充,在介紹中如果提及某項在 ST3 已有翻譯則使用中文,否則為 ST4 中的英文。

安裝

ST4 的安裝方法參見 Sublime Text 4 的下載頁面

ST3 的安裝方法參見 Sublime Text 3 的下載頁面

提示購買

ST 是收費軟件,但有一個無限期的試用,試用並不會帶來功能上的缺失,但會不時彈出彈窗提示激活。

插件與自定義

漢化

ST 並不支持中文,如需中文需要安裝漢化插件。

安裝插件管理器

打開 ST 後鍵入Ctrl+Shift+P喚出命令框,輸入 Install 後回車(完整命令是 Install Package Control,不區分大小寫),此時應該會看到左下角有一個 = 在不停的左右移動。Package Control 安裝完成(或失敗)後會有彈窗提示,具體的加載時間取決於網絡。

如果完成的彈窗顯示安裝失敗(與網絡有關),則需要手動下載 Package Control 並將下載好的文件放到 ST 的數據目錄下的 \Installed Packages 文件夾中。稍作等待,ST 會自動識別該插件(有時需要重啓 ST)。

ST 數據目錄的路徑

Windows 下,如果在 ST 的 安裝目錄 下存在 \data 文件夾,會自動使用(或初始化)該文件夾作為數據目錄。

ST3 的路徑一般為 C:\Users\用户名\AppData\Roaming\Sublime Text 3,ST4 一般為 C:\Users\用户名\AppData\Roaming\Sublime Text,ST 會先尋找對應版本的路徑,如不存在則尋找更低版本的路徑,如都不存在則新建並初始化。

在以 NOI Linux 所使用的 Ubuntu 20.04.1 中,ST3 的數據目錄為 $HOME/.config/sublime-text-3,ST4 的數據目錄為 $HOME/.config/sublime-text,使用的具體規則同 Windows 環境。

可以使用 首選項->瀏覽插件目錄... 快速查看數據文件夾路徑下的 \Packages 文件夾。

安裝漢化插件

再次按下Ctrl+Shift+P輸入 Install 後回車(完整命令是 Package Contrl:Install Package),等待加載完成,接下來應該是這個界面:

輸入 Chinese 選擇 ChineseLocalizations 並回車,等待安裝完畢,完成後界面會自動切換為中文(如是 ST4,因為漢化插件未更新,會少一些新增的菜單項,但一般對編輯無影響)。

調整字體

進入 首選項->設置,在右邊的用户設置中的花括號中添加一行 "font_face": "字體名",,ST 的設置使用 JSON 格式儲存。修改完成後保存,如果系統安裝了對應字體會自動切換。

一般而言,如果單論對中文的顯示的話,Microsoft Yahei Consolas 和 Microsoft YaHei Mono 是比較好的選擇。

Warning

注意任何設置(包括插件設置)即使能也不要在左邊的的默認設置中修改,這是不被推薦的,如果軟件(或插件)更新,默認設置會被重置。

安裝插件與主題

安裝插件與主題的方法與安裝漢化插件一致。

輸入Ctrl+Shift+P輸入 Install 後回車,然後搜索插件/主題/配色即可。

插件推薦:

  • BracketHighlighter : 對原版的括號高亮進行了增強,必備。
  • C++ Snippets : ST 自帶有 C++ 代碼補全,格式為大括號不換行。如果不習慣自帶大括號換行的碼風可以安裝這個插件,同時增加了一部分補全。
  • C++ 11 : 支持 C++ 11 標準高亮(ST4 中不需要)。
  • SublimeAstyleFormatter : Astyle,用於格式化代碼。
  • Diffy : 按Ctrl+K&Ctrl+D即可快速比較第一視窗與第二視窗打開的文件的不同,比較方式為逐行比較。
  • ConvertToUTF8 : 自動識別文件編碼,並支持編碼轉換。
  • SideBarEnhancements : 側邊欄增強,較為推薦。
  • Transparency : 窗口透明化。

有其他需要可以嘗試搜索。

一些主題:3

1337(單配色方案)、3024(單配色方案)、Grandson-of-Obsidian(單配色方案)、Seti_UI(單主題,額外包含 git 等格式的高亮,較為推薦)、Material Theme、Predawn、Agila、Materialize。

如果要編輯自己的配色方案,可以訪問 tmTheme Editor

如是 ST4 則可以在 Preferences->Customize Color Scheme 中調整配色方案或 Preferences->Customize Scheme 中調整主題。

開啓 Vi Mode

ST 的開發者為 Vi 使用者提供了一個可選插件 Vintage,可模擬 Vi 的大部分功能。

開啓方式

Vintage 插件默認是禁用的。可以通過 首選項->設置 在用户設置中,將 "ignored_packages" 一項中的 Vintage 刪除並保存(不要整個刪除,只刪除 Vintage),ST 的狀態欄左邊就會出現 INSERT MODE,此時 Vintage 插件已開啓。

或者按Ctrl+Shift+P,然後輸入 Enable 選擇 Package Control: Enable Package 並回車,選擇 Vintage 即可,該方法需要 Package Control。

相關配置

如果想讓上下左右鍵失效,可以在 首選項->快捷鍵設置 中添加:

1
2
3
4
{ "keys": ["left"], "command": ""},
{ "keys": ["right"], "command": ""},
{ "keys": ["up"], "command": ""},
{ "keys": ["down"], "command": ""},

如要使 ST 以命令模式啓動,則可以在 首選項->設置 中添加:

1
"vintage_start_in_command_mode": true,

也可以通過快捷鍵設置將進入命令模式設置成任意鍵(具體詳見 設置快捷鍵)。

與 Vi 的不同

ST 的 Vintage 插件與 Vi 有一定不同,部分列於此處:

  • 在插入模式下用選中不會進入可視模式,這時輸入不會被識別為命令而是直接替換文本。可視模式只有命令模式下才能進入。
  • rRzAzaziz=@ 與使用[]"鍵的命令不存在。
  • 使用CtrlShiftAlt鍵的快捷鍵會保留為 ST 設置的快捷鍵,如Ctrl+V不會進入可視模式而是正常粘貼。
  • 命令行模式只保留了 :e:0:$:s
  • 使用 \? 命令會自動喚出搜索框,而不是直接在命令中鍵入單詞進行搜索。同時,數字將無法生效。
  • q 宏錄製命令會啓動 ST 自帶的宏錄製,按Q後需要再按一個鍵啓動錄製,但錄製的宏不會與該鍵綁定,需要按Ctrl+Shift+Q才能啓動。如果需要保存,需要 工具->保存宏,快捷鍵需要設置。
  • 無法使用 數字+. 的組合。

設置

設置 ST

首選項->設置 中設置,這裏列舉部分較有用的選項:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
    //字體大小
    "font_size": 11,

    //字體,可以不設置,默認為 Consolas
    "font_face": "",

    //Tab自動轉換為空格
    "translate_tabs_to_spaces": true,

    //縮進寬度
    "tab_size": 4,

    //行高亮
    "highlight_line": true,

    //保存時自動在文件尾增加換行
    "trim_trailing_white_space_on_save": true,

    //在選擇時查找自動只查找選擇範圍
    "auto_find_in_selection": true,

    //禁用了OI中不太可能用到的插件,可以自己調整
    "ignored_packages": [
        "ActionScript", "AppleScript", "ASP", "Batch File", "C#", 
        "Clojure", "CSS", "D", "Diff", "Erlang", "Git Formats", 
        "Go", "Graphviz", "Groovy", "Haskell", "HTML", "Java", 
        "LaTeX", "Lisp", "Lua", "Makefile", "Matlab", 
        "Objective-C", "OCaml", "Perl", "PHP", "Python", 
        "R","Rails", "RestructuredText", "Ruby", "Rust", 
        "Scala", "ShellScript", "SQL", "TCL", "Textile", "XML", 
    ],

    //相對行號,可配合 Vintage 插件快速跳轉
    "relative_line_numbers": false,
}

設置快捷鍵

首選項->快捷鍵設置 中設置,在左邊找到需要修改的功能,然後複製到右邊並修改按鍵即可。

例如,如果要把Ctrl+B的編譯改為F9(如果不令原有的快捷鍵失效,實際是增加一個觸發方式),則可以在 首選項->快捷鍵設置 中添加:

1
2
3
4
5
//將build命令改為f9
{ "keys": ["f9"], "command": "build" },

//將原有的f9對應的行排序功能的快捷鍵改為shift+f9,由於大部分時候這個功能用不到,這一行也可以不添加
{ "keys": ["shift+f9"], "command": "sort_lines", "args": {"case_sensitive": false} },

設置插件

插件的設置可以在 首選項->Package Setting->插件名 中找到,做修改時請注意不要修改默認設置。

例如,這裏給出 BracketHighlighter 的一些設置,在 首選項->Package Setting->BracketHighlighter->Bracket Setting 中修改:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
    //在匹配的括號之間行的行首顯示一條線,可以快速找到括號的範圍
    "content_highlight_bar": true,

    //在小地圖中顯示匹配的括號
    "show_in_minimap": true,

    //忽略匹配範圍限制
    "ignore_threshold": true,

    //style高亮樣式,bold為塊高亮,underline為加粗下劃線,outline為外圍一圈
    //color為顏色,默認設置中已經包含了所有支持的顏色
    //icon為在側邊欄顯示的標誌
    "bracket_styles": {
        "default": {"icon": "dot", "color": "region.yellowish", "style": "bold",},
        "unmatched": {"icon": "question", "color": "region.redish", "style": "outline",},
        "curly": {"icon": "curly_bracket", "color": "region.purplish",},
        "round": {"icon": "round_bracket", "color": "region.yellowish",},
        "square": {"icon": "square_bracket", "color": "region.bluish",},
        "angle": {"icon": "angle_bracket", "color": "region.orangish",},
        "tag": {"icon": "tag", "color": "region.orangish",},
        "c_define": {"icon": "hash", "color": "region.yellowish",},
        "single_quote": {"icon": "single_quote", "color": "region.greenish",},
        "double_quote": {"icon": "double_quote", "color": "region.greenish",},
        "regex": {"icon": "star", "color": "region.greenish",}
    }
}

修改與添加

有時候,插件的某些地方可能並不盡如人意,或想對插件進行漢化,這時就需要對插件做一些修改。

插件存放的位置是數據目錄下的 \Installed Packages 文件夾。

裏面的文件以 .sublime-package 為後綴,實際上為 .zip 格式,可以使用解壓縮軟件打開。

例如,如果要修改自動補全,可以打開 ST 的 安裝目錄 \Packages\C++ 插件中的 \Snippets\*.sublime-snippet 文件修改,如要 增添 自動補全,可以安裝 C++ Snippets 並在其中修改或添加文件(或新建一個插件,但不能直接添加進自帶的 C++ 插件,否則無法被識別)。保存任何修改時 必須 關閉 ST,且請提前做好備份,否則可能出現文件丟失。

當然,任何增添都可以放在數據目錄路徑下的 \Packages\User\ 下,這總是被支持的。

例如,一個文件模板的補全可以這麼寫:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<snippet>
    <description>template_code</description> <!-- 這裏的內容是補全內容的預覽 -->
    <content><![CDATA[#include <cstdio>
using namespace std;

int main() {
  freopen("${1:file name}.in", "r", stdin);
  freopen("$1.out", "w", stdout);
  ${0:/* code */}
  fclose(stdin);
  fclose(stdout);
  return 0;
}]]></content>
    <tabTrigger>code</tabTrigger> <!-- 這裏的內容是補全的觸發文本 -->
    <scope>source.c++</scope> <!-- 這裏的內容是補全適用語言 -->
</snippet>

以下列出部分文件後綴以及其用途,具體的插件開發教程詳見 社區文檔官方文檔

後綴名 用途
.sublime-build 編譯系統文件
.sublime-completions 文件名補全列表(一般為頭文件)
.sublime-syntax 語法高亮文件
.sublime-settings 設置文件
.tmPreferences 首選項中的列表文件
.sublime-keymap 快捷鍵設置文件
.sublime-snippet 代碼補全文件
.sublime-commands 命令定義文件
.sublime-menu ST UI 文件,包括側邊欄以及頂部菜單欄(漢化的主要對象)

由於插件更新會直接覆蓋原文件,所以建議備份更改的文件。

編輯

設置語法

Ctrl+Shift+P後輸入語法即可,或者按右下角的 Plain Text 然後修改為需要的語言,同時在 視圖->語法 中也可以設置。

快捷鍵

ST 有複合快捷鍵,如Ctrl+K&Ctrl+Backspace表示先按Ctrl+K再按Ctrl+Backspace

部分快捷鍵:

按鍵 命令
Ctrl+X 剪切當前行
Ctrl+Shift+K 刪除行
Ctrl+Enter 在下方插入行
Ctrl+Shift+Enter 在上方插入行
Ctrl+Shift+Up 行上移
Ctrl+Shift+Down 行下移
Ctrl+L 選擇行,重複以向下選擇多行
Ctrl+D 選擇詞,重複以選擇多個相同詞,並進入多重選擇模式(用於快速批量更改)
Ctrl+M 跳轉到匹配的括號
Ctrl+Shift+M 選擇括號內的內容(不包括括號),重複以包括括號
Ctrl+K&Ctrl+K 刪至行尾(複合快捷鍵,建議使用 Vim 模式代替)
Ctrl+K&Ctrl+Backspace 刪至行首(複合快捷鍵,建議使用 Vim 模式代替)
Ctrl+] 縮進當前(選擇的)行
Ctrl+[ 取消縮進當前(選擇的)行
Ctrl+Shift+D 複製當前行,並插入在下一行
Ctrl+J 合併下一行與當前行
Ctrl+Shift+V 粘貼並縮進(用於整段粘貼代碼)
Ctrl+K&Ctrl+Shift+V 從歷史粘貼(複合快捷鍵,建議修改為Ctrl+Alt+V
Ctrl+Alt+Down 光標下移,並保留當前行光標(進入多重選擇模式)
Ctrl+Alt+Up 光標上移,並保留當前行光標(進入多重選擇模式)
Ctrl+R 跳至文件中的任意符號(函數或類型定義)
Ctrl+Shift+R 跳至項目中的任意符號(函數或類型定義)
Ctrl+P 跳至任意文件(曾經打開過或在項目中且存在的文件)
~ 轉換選擇內容的大小寫

自動補全

ST 有豐富的補全功能,可能的補全內容會在光標下方顯示,按TabEnter進行補全(ST4 中,如進行一個非 Snippet 類型的補全,接下來再按Tab可繼續選擇為以該補全為子串的補全)。

Snippet 類型的補全一般會有一些編輯塊,補全後會自動選擇為替換文本,如果是 for 等含有多個編輯塊的複雜補全,編輯完成後再次按Tab完成下一個編輯塊,此時要在編輯塊中觸發補全需要使用Enter(在 ST4 中可繼續使用Tab)。

如果沒有自動補全,請如下修復:

  1. 檢查是否切換了語言,ST 默認新建文件為 Plain Text。

  2. 進入 首選項->設置 然後添上兩行:

1
2
"auto_complete": true,
"auto_match_enabled": true,

多重選擇

按住Ctrl並用鼠標單擊即可在屏幕上增加光標,Ctrl+Alt+UpCtrl+Alt+Down可以在相鄰兩行直接增加光標,任何編輯性質的操作會同時應用至所有光標。

查找與替換

Ctrl+F為查找,F3為查找下一個Shift+F3為查找上一個,Ctrl+H為替換。

五個查找選項分別為正則表達式匹配、大小寫敏感、全字匹配、循環查找、在選段中查找。

建議在首選項中將 "auto_find_in_selection" 設置為 true。這樣在選擇超過一個詞時使用查找會自動只在選段中查找。

演示

熱啓動

嘗試在 ST 中鍵入一些內容,並直接把整個 ST 關閉,ST 會直接關閉且沒有任何提示,再打開 ST 時只要不對電腦進行數據還原就不會丟失任何數據。

多重選擇

如果要把以下代碼中的所有 bok 改為 book,只需將光標放置在任意一個 bok 中,長按Ctrl+D即可快速選中。

1
2
3
4
int check() {
  book[1] = 1, book[2] = 1, book[3] = 1, bok[1] = 1, bok[2] = 1, bok[3] = 1,
  bok[4] = 1, bok[5] = 1;
}

如果要將下列文件中的所有等號後面改成 "good",只需在將光標放置於第一行的 aaa 前,並按五次Ctrl+Alt+Down,再然後按下Ctrl+D並鍵入 good 即可。

或選中 "a 並按住Ctrl+D,然後按RightCtrl+D,之後鍵入即可。

1
2
3
4
5
6
s[1] = "aaa";
s[2] = "aab";
s[3] = "aac";
s[4] = "good";
s[5] = "aae";
s[6] = "aaf";

如要為下列所有 a + b 加上括號,只需選擇一個 a + b,按住Ctrl+D並鍵入(即可(如選擇一定區域,則任意左括號鍵入會為該區域兩邊添加匹配的括號)。

1
a + b*a + b*a + b

查找與替換

如果要將下列文件中的所有等號後面改成 "good",也可以用Ctrl+H使用替換,打開正則,輸入 ".*",並替換成 "good" 即可。

1
2
3
4
5
6
s[1] = "aaa";
s[2] = "aab";
s[3] = "aac";
s[4] = "good";
s[5] = "aae";
s[6] = "aaf";

如要為以下代碼添加分號,只需使用選擇區域替換,打開正則,輸入 \n,並替換成 ;\n 即可。

1
int main() {  int a, b  cin >> a >> b  cout << a + b  return 0}

宏錄製

如要為以下代碼添加分號,可以按Ctrl+q啓動宏錄製接下來依次按End;Down再按Ctrl+q結束宏錄製(中途左下角不會全程顯示正在錄製,但確實在錄製),接下來重複Ctrl+Shift+q即可。

1
2
3
4
5
6
int main() {
  int a, b
  cin >> a >> b
  cout << a + b
  return 0
}
如已開啓 Vintage 插件

執行一次Ctrl+Shift+q後,可以Esc進入命令模式,輸入 .. 即可(. 命令可以重複 ST3 命令)

關於宏的保存與綁定按鍵詳見 社區文檔

編譯與運行

ST 的編譯環境已經配置好了,可以直接使用。

Windows 環境下需要將 g++ 所在目錄添加到環境變量中,並重啓 ST。

編譯

直接按Ctrl+B編譯,第一次使用會需要選擇編譯系統,選擇 C++ Single File(編譯)或 C++ Single File - Run(編譯並運行)。

修改編譯選項

ST 默認的編譯選項為 g++ "${file}" -o "${file_path}/${file_base_name}",如果要修改編譯選項,可以新建一個編譯系統。

進入 系統->編譯系統->新建編譯系統… 然後在大括號中間輸入:

1
2
3
4
5
6
//編譯選項可以自己調整
"cmd": ["cmd","/c","g++","-Wall","${file}","-o","${file_path}/${file_base_name}"
    ,"&&","cmd","/c","${file_path}/${file_base_name}"],  //這部分為運行

//這一行可以讓ST3圖形化顯示報錯,如果習慣了看g++返回的信息可以去掉
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

保存後按Ctrl+Shift+B切換編譯系統就可以使用了,這裏的配置是編譯並在外部 CMD 運行。

保存的文件為數據目錄路徑下的 \Packages\User\編譯系統名.sublime-build 可以反覆修改。

運行

如果編譯時選擇 C++ Single File - Run(即編譯後運行)或配置了自動運行,那麼在下方彈出的編譯信息窗口應該不會有任何顯示(除非編譯錯誤),因為 ST 的編譯信息窗口實際上是一個終端,可以直接輸入數據。

運行結束後會提示程序的運行時間,其計時為從按下Ctrl+B到全部 CMD 命令運行結束的時間,也就是説包括編譯的時間和輸入的時間,以及如果在外部 CMD 運行還包括 CMD 開啓關閉的時間。

Warning

這個窗口無法輸入F6Ctrl+Z,如果運行讀入到文件末尾的程序請使用文件輸入,或配置在外部 CMD 運行。

調試

可以安裝插件使 ST 支持圖形化 gdb 調試,但不建議依賴插件進行 gdb 調試。

更好的做法是在配置編譯系統時加上相關命令啓動 gdb,在外部進行命令行調試。

雜項

  • 把文件夾拖進 ST 中並按Ctrl+K&Ctrl+B開啓側邊欄,從而快速切換文件。
  • 善用跳轉功能,尤其是Ctrl+P進行文件間跳轉與Ctrl+R進行函數跳轉。
  • ST 支持 git4
  • ST 的所有配置儲存在數據目錄下,可以隨意打包,但註冊信息無法在多台電腦上使用。

外部鏈接

參考資料與註釋