Re:從零開始教你使用 Sublime Text( 三 )


2.編譯運行 C++ 程序首先 Sublime 自身可以直接編譯運行程序 , 方法是按快捷鍵 Ctrl+B 或者點擊菜單欄 Tools->Build 。另外 , 也可以在 Tools->Build System 選擇編譯系統 。還可以按快捷鍵 Ctrl+Shift+B 或者點菜單欄 Tools->Build With 選擇用什么編譯 。運行結束后會在控制臺中顯示結果和運行時間 。

Re:從零開始教你使用 Sublime Text

文章插圖

Re:從零開始教你使用 Sublime Text

文章插圖
但是自帶的編譯有一個問題 , 就是無法輸入 。如果你寫一個 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" , 因為會出現兩個 & 之間的優先級錯誤 。
例子的第二行用于顯示編譯錯誤,效果如下:
Re:從零開始教你使用 Sublime Text

文章插圖
主要效果是顯示中間的紅框,如果去掉這句話則只會在控制臺中顯示錯誤信息 。
關于為什么正則表達式是 ^(..[^:]*):([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++ 。當沒有填寫時則默認范圍為所有文件 。

推薦閱讀