VS code 是一個非常不錯的代碼編輯器。它不依賴與任何編譯器或者解釋器,但卻能高效的利用第三方編譯器或解釋器來給用戶提供良好的代碼編寫環境。
我喜歡VS code的三點,豐富強大的插件,快捷的語法分析自動補全和自動轉跳功能,集成Git管理與Debug功能。
豐富強大的插件
第一個功能不必說,他是VScode的強大支柱,我可以找到自己喜歡的主題插件,字體或者語言支持插件等,有了它,VScode能給人更多的驚喜,和附加的功能,這些功能等着我們去探索。就比如我要想顯示一個二進制文件的二進制信息,找個插件就有了,要寫markdown,cmakelist沒有語法高亮很難受?去插件商店里找找就有了。這個主題不好看,想換個主題,也可以通過換插件的形式來完成。想寫Latex文檔,沒有代碼提示,商店里也有相應的功能支持,習慣了Vim或Emacs鍵位?商店里也有。
官方C/C++智能插件
這個確實很智能,速度很快,力推。比如C/C++項目,下載C/C++那個C/C++ IntelliSense, debugging, and code browsing 插件加上一個編譯器調試器就能提供第二個功能,而且配置還很簡單快捷。想想在Emacs上或者Vim想實現代碼自動補全和轉跳功能都困難成啥樣了。至少對新手來說花費的時間代價已經遠遠超過安裝VScode所費的時間了,而VScode安裝了就能用的。
好現在來看看實現第二個功能到底有多簡單
-
1、安裝C/C++ IntelliSense, debugging, and code browsing. 插件
-
2、安裝編譯器調試器,比如gcc,Linux下一般都直接集成了,windows下一般只要下載mingw就可以下全編譯和調試的功能,百度mingw進入官網下載,可以選擇下載mingw-get-setup.exe,然后再里面選擇想要的gnu產品,然后就添加bin目錄到系統環境
\
下載好后還要添加到系統環境中才能方便VScode構建項目時調用哦。
-
3、接下來我們需要三個json配置文件c_cpp_properties.json,launch.json,tasks.json,它們的作用分別是為插件提供智能代碼語法分析依據,啟動調試文件、構建任務文件。
我們可以在全局中生成配置,也可以只爭對某個項目而在局部中生成。例如對於項目,我們可以Ctrl+shift+p然后輸入c/c++,之后選擇UI的形式打開或者json文本形式打開
然后就可以進行編輯,比如下面的例子中我用的是clang編譯器作為代碼分析工具,下面的配置就是在通知c/c++那個官方的智能提示插件說你的代碼語法分析要能通過clang編譯器的審核,所以哪里有問題,哪里獲得庫文件都是clang說了算,於是這個插件就會每次輸入代碼時去調用clang編譯器在后台悄悄編譯並做語法分析,哪里編譯不通過就會返回給用戶說你哪個文件第幾行第幾列有問題,不過呢,由於這里clang因為本身沒有提供指定操作系統的連接器,我這里把它的目標給了x86_64-pc-mingw32,指明它在編譯的時候生成的是mingw那套程序,所以遇到系統調用相關的頭文件以及在鏈接的時候都還需要gnu的頭文件和連接器,這是編譯的附加選項compilerArgs。如果你用的是gcc編譯器,用的本身就是gnu自家的東西,它自然不需要你指明用mingw里面的庫和鏈接器。includePath
常用來指明項目本身的頭文件。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "E:\\ProgramFiles\\LLVM\\bin\\clang++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64",
"compilerArgs": [
"--target=x86_64-pc-mingw32"
]
}
],
"version": 4
}
OK啦,做到這一步一般來說你以及擁有了一個很不錯的代碼智能提示和補全的編輯器了,就只是下載了一個插件和一個編譯器,然后你就可以盡情的寫代碼了。你可以用第三方項目構建管理工具在終端命令行上完成你的項目構建。值得一提的是,如果是交叉編譯,VScode也是支持的,只要把編譯器換成交叉編譯的編譯器,然后交叉平台上的頭文件也可以包含在里面,然后讓智能插件去分析代碼語法和自動補全以及代碼轉跳。
- 4、接下來如果你不滿足與每次都要在命令行上敲代碼,想要更加的快捷自動化,那么你可以用VScode的另外的配置文件,它將幫你快速的進行代碼構建和調試。我們可以通過新建一個任務配置來創造一個快捷編譯功能。同樣是Ctrl+shift+p然后輸入task
這里有好多的任務模板,你可以選擇你想要的那個構建任務,比如你要創建一個編譯當前文件並生成可執行文件的任務。下面的示例代碼就是對單個文件進行編譯的任務,當調用這個任務時,${file}
會獲取你當前正在編輯文件的文件名,而我們把它作為g++的輸入參數,輸出我則是放在當前工作目錄下的一個build目錄,並給與的名字和文件名相同,而這通過下面一句${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe
就能簡單完成。同時我們指定的這個任務是在終端完成的,所以任務類型設置為shell。而終端任務說白了就是一個能一鍵自動幫你完成所有需要輸入終端命令的操作,他會根據這些信息進行匹配。然后在傳遞給終端,終端通過環境變量來進行多個程序調用相互,最終輸出我們想要的結果。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build exe",
"command": "g++",
"args": [
"-g",
"${file}",
"-o", // fileDirname, workspaceFolder
"${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "E:\\ProgramFiles\\mingw64\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
如此以來我們想將當前代碼編譯成可執行文件,那么就只需調用這個task就行了,通過快捷鍵Ctrl+B或者在菜單欄->終端->運行生成任務。然后就會在build下看見對於當前文件名的可執行文件了。這時后仔細查看終端,我們發現,終端上有下面這樣一條命令。這就印證了剛才我們說的,VScode執行任務時其實就是在調用終端,幫我們自動輸入了指令。
可以看到,生成的main.exe以及放到build目錄下了。
- 5、vscode按下F5可以調用launch.json配置,比如以下配置是提供gdb調試功能的,具體信息代碼里面有解釋,和task類似不多說了。
{
// 使用 IntelliSense 了解相關屬性。
// 懸停以查看現有屬性的描述。
// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe", // 將要調試的程序目錄
"args": [], // 調試時傳遞給程序的命令行參數,一般為空即可
"stopAtEntry": false, // 設置true時程序將暫停在入口處,一般設置為false
"cwd": "${workspaceFolder}\\files", // 程序調試時的工作目錄,可用於管理調試生成的文件
"environment": [], //
"externalConsole": false, // 啟用窗口控制台
"internalConsoleOptions": "neverOpen", // 如果不設置為neverOpen,調試時回調到
"MIMode": "gdb", // 指定連接的調試器
"miDebuggerPath": "E:\\ProgramFiles\\mingw64\\bin\\gdb.exe", //調試器路徑
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
通過簡單的配置我們就能達到非常強大的功能,真的是很不錯。
集成Git
不錯,集成Git在代碼管理發布確實更為方便了不少,而Git的使用則是另一回事了,但總之如果你用過Git你再來用VScode你會發現,當pull有沖突時,它可以幫你清爽的提示出來,還有一鍵和遠端同步或push遠端版本,真是不錯呢。