前言
我是一名后端開發工程師,主要語言是C、Go、Python。早年做C開發的時候都是在windows下開發,一直使用的是soure insight,尤其是時隔多年更新的4.0版本解決了中文亂碼等問題,用起來更是得心應手。后來轉到Mac下開發,雖然可以用wine運行windows程序,但總感覺別扭,也是時候做一些新的嘗試了。
為了家里和公司開發環境的統一,對開發工具的要求首先就是要跨平台,slickedit、clion、understand、sublime、atom我都嘗試過,最終我選擇了vscode。主要幾個原因:支持多種語言開發;官方支持中文;插件安裝方便;完全免費(公司不允許安裝盜版軟件);運行速度快;支持遠程開發;顏值較高。蘿卜白菜各有所愛,適合自己的才是最重要的。
vscode不是IDE,需要安裝各種依賴的插件和配置才能很好的工作,因此和soure insight的開箱即用,適應起來需要些時間。經過這幾年的發展vscode以及很強大了,但作為C開發它還是有一些不足,例如不能像soure insight顯示函數調用關系圖(注,這里說的是關系圖,查找函數在哪里被調用是沒問題的),目前我是使用doxygen+graphviz工具作為補充工具。understand在這方面做的比較好,如果在家里看代碼的話我也會配合着使用。
本文將以windows下為例做配置說明,其他系統下類似。最后,歡迎大家討論和轉載,本文也會持續更新。轉載請注明來源:https://www.cnblogs.com/realjimmy/p/12990433.html
一、插件安裝
我用到的開發語言包括C、Go、Python、Shell、Lua、Mysql。這是我安裝的所有插件,其中Remote是用於遠程開發(下面會有專門的章節介紹),Setting Sync用於vscode配置的備份,可在不同設備間同步,其他的根據插件名字基本都能明白其作用,這里就不做過多解釋,各位可以根據自己的需求增刪插件。
有的插件還需要安裝其他額外的輔助工具,比如在打開c文件時,會自動下載clang-format等工具;打開go文件時會自動安裝gotools,需要注意的是gotools安裝特別慢,經常一輪安裝下來總有幾個裝不上,不過也沒有關系,多試幾次總能成功。
二、各種語言開發環境
本章節主要是基礎開發環境的配置,包括依賴編譯工具等,具體的vscode配置會在第三章介紹。
2.1 C語言開發基礎環境
2.1.1 安裝Mingw-w64(僅windows需要)
編譯代碼、代碼調試都需要用到。
下載地址:https://sourceforge.net/projects/mingw-w64/files/
選擇適合自己的版本。
- i686 的是32位版,x86_64 的是64位版
- posix和win32是os接口類型
- sjlj/seh/dwarf 是異常處理方案,具體的差異可以自行百度
seh :支持64位,新,性能比較好
sjlj :支持64+32位,舊,穩定性好。
dwarf :支持32位
我選擇,x86_64-posix-seh。安裝好后需要配置環境變量,如:C:\mingw-w64\mingw64\bin
2.1.2 安裝Clang(僅windows需要)
語法檢查需要用到,編譯代碼時可以用mingw的gcc,也可以用clang。這里我們直接下載編譯好的安裝包。
https://releases.llvm.org/download.html
2.1.3 添加頭文件目錄
我的開發環境是windows下連到linux虛擬機下開發linux程序,因此很多標准庫的頭文件都會有波浪線報錯,需要手動指定一下。
方法一:指定Mingw-w64里的頭文件
能夠去掉波浪線,但是對於printf這類函數的參數提示有點問題。
方法二(我使用此方法):從linux下拷貝頭文件
例:將下面兩個文件夾拷貝到windows下 D:/code/vscode-include/linux-c/usr/include
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/
/usr/include/
接着我們在vscode的項目里指定頭文件(換工作目錄了需要重新指定),打開工程目錄,打開C文件,選擇win32-->編輯配置。
除了標准庫外,項目里的其他頭文件如果找不到也可以用這種方式添加。
指定頭文件目錄
2.1.4 編譯運行與調試
1)快速編譯運行
如果是單個.c文件(比如測試代碼),右鍵點run code即可運行(依賴CodeRunner插件)。
2)使用gdb調試
涉及兩個配置文件,tasks和launch。tasks可以被用來做編譯,而launch用來執行編譯好的文件。
首先配置tasks:
F1,輸入tasks,選擇配置任務
我這里配置編譯運行單個文件為例,幾個注意事項:
- label:這個任務的名詞,一會兒在launch里配置的preLaunchTask(執行前的任務)名稱要和這個一直。
- command:編譯執行的命令,我這里寫的gcc,也可以是其他編譯時要執行的命令。
- arg:執行命令的參數,這里通過gcc的參數-o指定了編譯后可執行文件的路徑。
- cwd:命令的目錄,這里指向mingw64的bin命令。
接着配置launch,
注意事項:
- program:指定了運行時的程序,和task對應。
- miDebuggerPath:指定gdb路徑。
- preLaunchTask:指定運行前的任務,即編譯任務,與前面配置的task對應。
現在可以開始調試代碼了,在代碼行號左邊點擊即可打斷點,點綠色小三角或是F5開始編譯、執行。
在調試控制台可以輸入gdb命令,格式:-exec <command>
2.2 Go語言開發基礎環境
2.2.1 下載Go安裝包
根據不同操作系統自行下載
下載地址:
2.2.2 Go安裝
【windows下部署】
1)安裝注意路徑不要有空格和中文,環境變量也會自動配置。
2)打開cmd輸入go version,查看是否安裝成功
3)配置$GOPATH和工作空間
在系統環境變量中添加$GOPATH變量,表示工作代碼空間。
注:也可以使用go env -w 命令配置,但是如果有環境變量了則會報錯。
在$GOPATH目錄下創建以下三個目錄
/src 存放源代碼
/pkg 存放編譯文件
/bin 存放執行文件
【Linux部署】
1)解壓到/usr/local目錄下
tar zxvf go1.13.4.linux-amd64.tar.gz
mv go /usr/local/
2)建立保存go工作目錄,將是下載組件的默認路徑
mkdir /root/go_src
3)設置環境變量
在root用戶下執行 vim /etc/profile命令在末尾添加配置並保存
export GOPATH=/root/go_src
export GOROOT=/usr/local/go
【Mac部署】
export GOPATH=/root/go_src
export GOROOT=/usr/local/go
4)重新登錄session
2.2.3 設置代理
2.2.4 測試go工具
第一個go程序
在工作目錄里創建hello.go
package main import "fmt" func main() { fmt.Printf("hello, world\n") }
1)使用go run直接運行:
$go run ./hello.go
2)編譯后運行,可執行文件為文件夾名
go build hello.go
./hello
2.2.5 dlv調試工具安裝
$ git clone https://github.com/go-delve/delve.git $GOPATH/src/github.com/go-delve/delve
或者 go get github.com/derekparker/delve/cmd/dlv
$ cd $GOPATH/src/github.com/go-delve/delve
$ make install
2.3 Python開發環境搭建
2.3.1 下載安裝python
下載地址:https://www.python.org/downloads/
根據提示安裝即可。
2.3.2 設置國內pip資源
國內還有很多pip鏡像源,可以根據個人的網絡資源自由替換index-url和trusted-host的值。這里設置阿里雲作為國內pip資源
#index-url使用Alibaba的鏡像源trusted-host = mirrors.aliyun.com
#trusted-host標記Alibaba的鏡像源服務器為可信賴主機
2.3.3 安裝更好的交互編程工具
pip install ipython
3 vscode配置
3.1 我的配置文件參考
直接貼出我的配置,部分沒有注釋的,可以看vscode給出的解釋。
{ //---------------【GO相關配置】------------------- "go.gopath": "D:/code/go", "go.goroot": "c:/go", "go.formatTool": "goimports", //可選格式化工具,看大家都選這個 "go.useLanguageServer": true, //不開的話跳轉很慢 "go.lintOnSave": "off", //在保存代碼時自動檢查代碼可以優化的地方,並給出建議 "go.toolsGopath": "D://code/go", //第三方插件安裝位置 "go.testOnSave": false, //保存時執行go test "go.testFlags": [ //-v參數能保證執行go test時有輸出 "-v" ], //--------------【python相關配置】-------------- //treu使用IntelliSense引擎,false使用Microsoft Python Analysis Engine "python.jediEnabled": true, "python.pythonPath": "C:/Users/jimmy/AppData/Local/Programs/Python/Python38/python.exe", "python.autoComplete.extraPaths": [ //設置python的第三方庫路徑 "C:/Users/jimmy/AppData/Local/Programs/Python/Python38/Lib/site-packages", ], "python.autoComplete.addBrackets": true, //自動補全函數帶括號 "python.formatting.provider": "yapf", //格式化引擎 //--------------【C相關配置】------------------------ "C_Cpp.updateChannel": "Default", //自動更新插件,設置Insiders為自動更新內部版本 //c代碼格式化方案
"C_Cpp.clang_format_fallbackStyle": "{BasedOnStyle: LLVM, IndentWidth: 4, ColumnLimit: 0}",
//---------------【配置文件同步】--------------------- "sync.gist": "xxxx",//根據實際情況配置,這里不用手動配置,通過界面配置后會自動填寫到這里 "sync.quietSync": false, "sync.syncExtensions": true, //----------------【調試相關】-------------------- //code-runner是否在終端中運行,但這回生成一個臨時文件,可以在executorMap里刪除(但刪除文件有風險) "code-runner.runInTerminal": false, "code-runner.executorMap": { "c": "cd $dir && gcc $fileName -o D:/tmpFile/$fileNameWithoutExt && D:/tmpFile/$fileNameWithoutExt", }, "debug.onTaskErrors": "abort", //控制在運行預啟動任務后遇到錯誤時做法,abort退出 //----------------【遠程開發的目標設備】-------------------- "remote.SSH.remotePlatform": { "192.168.25.129": "linux" }, //----------------【保存文件時自動在文件首行添加注釋】-------------------- "fileheader.customMade": { "Author": "realjimmy", // 作者 "LastEditTime": "Do not edit", // 文件最后編輯時間,保持不要修改,會自動替換 "Blog": "https://www.cnblogs.com/realjimmy/", "Describe": "", // 描述信息 }, //----------------【path路徑自動填充】-------------------- "path-intellisense.extensionOnImport": true, //----------------【高亮插件配置】-------------------- "highlightwords.colors": [ { "dark": "yellow", "light": "yellow" }, { "dark": "Cyan" }, { "dark": "Pink" }, { "dark": "LightGreen" }, { "dark": "LightSteelBlue" }, { "dark": "MediumOrchid" }, { "dark": "cornflowerblue" }, { "dark": "DarkOrange" }, ], "highlightwords.box": { //實驗結果:false全部填充,true僅填充外框 "dark": false }, //--------------------【shell格式化工具配置】-------------------- "shellformat.path": "c:/Users/jimmy/.vscode/extensions/foxundermoon.shell-format-7.0.1/bin/shfmt_v3.1.0_windows_amd64.exe", //---------------【vscode其他配置】--------------------- "editor.parameterHints.enabled": false, //輸入時函數參數提示 "editor.formatOnType": false, //輸入一行時格式化代碼 "editor.formatOnPaste": false, //黏貼時格式化代碼 "editor.formatOnSave": true, //保存時格式化開關 "editor.renderControlCharacters": true, "editor.rulers": [ //編輯器顯示標尺 80 ], "editor.quickSuggestionsDelay": 1, //控制顯示快速建議前的等待時間 (毫秒) "editor.snippetSuggestions": "top", //代碼片段建議比如if時的代碼片段建議,放在top "editor.fontSize": 18, "editor.renderWhitespace": "selection", //空白字符的顯示方式 "editor.renderLineHighlight": "all", //當前行高亮方式 "editor.tokenColorCustomizations": { // "comments": { // // 設置字體樣式加粗bold下划線underline斜體italic等 // "fontStyle": "", // // 設置字體顏色 // "foreground": "#4caee2" // }, // 注釋 //"keywords": "#0a0", // 關鍵字 //"variables": "#f00", // 變量名 //"strings": "#18170fbd", // 字符串 //"functions": "#5b99fcc9", // 函數名 "numbers": "#ff819c", // 數字 "functions": { // 設置函數的字體樣式 加粗 下划線 斜體等 "fontStyle": "bold", }, }, "editor.suggestSelection": "first", "editor.hover.delay": 300, // 控制鼠標放在代碼上懸停提示前的等待時間 (毫秒) "terminal.integrated.shell.windows": "C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe", //默認終端 "window.zoomLevel": -1, "http.proxySupport": "off", // "terminal.integrated.fontFamily": "Menlo for Powerline", "terminal.integrated.rendererType": "dom", "explorer.confirmDragAndDrop": false, "workbench.colorCustomizations": { //選中文本的顏色 "editor.selectionBackground": "#33609e", //當前相同文本高亮的顏色 // "editor.selectionHighlightBackground": "#0d7c21", //鼠標所在行的顏色 // "editor.lineHighlightBackground": "#00000000", "editor.lineHighlightBorder": "#033d4a", }, "workbench.settings.useSplitJSON": true, //json配置時使用拆分json編輯器來顯示默認配置 "workbench.editor.revealIfOpen": true, "emmet.triggerExpansionOnTab": true, "git.path": "C:/Program Files/Git/bin/git.exe", "git.autofetch": false, "extensions.autoUpdate": true, //自動更新插件 }
3.2 配置備份和同步Settings-sync
vscode配置可謂是核心中的核心,如果日積月累的配置丟了是真的會哭,另外如果你有多台設備可以方便在不同設備間同步配置。
3.2.1 前期准備
原理是自動上傳到github的gist里。因此需要用到github賬號,
1)注冊github.com賬號
2)測試gist.github.com地址是否能訪問,若沒有FanQiang可以通過配置host指向gist.github.com來解決
例如windows下:
打開C:\Windows\System32\drivers\etc\hosts文件
在最后行添加192.30.253.118 gist.github.com
注:能夠正常訪問gist.github.com了后面的步驟才有意義。
3.2.1 Settings Sync插件配置
1)下載vscode里下載setting sync插件
2)與github同步相關的配置
如果你曾經使用過,建議先清一下sync的配置。
vscode里按F1,Sync重置。
執行同步上傳快捷鍵 shift+alt+u,會彈出配置界面,點擊Login With Github
打開網頁認證github,顯示Success即通過認證,此時會在配置里自動填寫令牌。
這里會自動創建訪問github的令牌,並寫入插件配置中(和傳統方式建立的令牌不一樣,在github頁面上沒有顯示,不確定是不是臨時的令牌,我有的時候會連不上)
如果你是第一次使用,會提示創建gists,跟着向導配置就可以了。成功即可忽略下面步驟。
如果沒有向導,繼續按下面的步驟操作。
github上點擊You gists
以下信息隨意寫,正文內容會在同步后被覆蓋
url里最后一串記就是GistId,記下來,需要在vscode里配置
回到vscode頁面,點擊編輯配置
將剛才復制的GistId填寫上
注意右邊的令牌內容,在前面指向login with github的時候,登陸成功會自動生成並填寫,如果后續要更改可以在github上通過以下方式:
此時會生成一個新的令牌。
3)配置同步及其他配置
執行shift+alt+u同步,會提示強制上傳,點確定。終端輸出以下信息表示同步完成
我們在github上看到,原本的內容也已經被更新。這個工具提供的是同步配置、以及插件名稱。不會把插件本身上傳到github上。
主要就兩個快捷鍵,上傳及下載
上傳: Shift + Alt + U
下載:Shift + Alt + D
配置可以在高級選項里配置
4 遠程開發方案
當你的代碼不在本機,比如遠端設備或虛擬機,用vim看代碼不是所有人都適應,那還有哪些解決方案呢?在此之前我的方案是:1)在遠端設備執行mount命令,將本機目錄掛載到遠端 2)在本機使用samba將遠端目錄掛載到本機。
本章節將提供另外兩個由vscode支持的遠程開發解決方案。
4.1 remote-ssh插件
最方便的遠程開發方案,但目前只支持64位系統,對libc版本也有要求,centos7下測試沒問題,centos6就報libc版本不對。
環境:vscode在windows,服務器在linux
1)安裝remote-ssh插件
2)目標主機上安裝git2.0以上(可選)
先用git --version查看版本,如果低於2.0,先卸載舊版
yum remove git
添加新源后安裝新版
yum install -y https://centos7.iuscommunity.org/ius-release.rpm yum install -y git2u
3)將文件watches限制增加到最大值,這個跟vscode打開文件個數限制有關。
sudo vim /etc/sysctl.conf
增加一行放
fs.inotify.max_user_watches=524288
保存,最后在控制台執行
sudo sysctl -p
即可正常使用。
4)vscode連接
5)點擊vscode插件管理,在遠程安裝各種插件,如:
5)為了方便最好通過ssh-key設置一下ssh免密登錄。步驟略。
4.2 使用sftp插件
SFTP插件自動上傳文件的方案,適用於非64位系統,或centos6等libc版本較低的系統。
在.vscode文件夾下的sftp.json文件中配置對應的信息,對應參數如下
name:你可以隨便起,建議純英文。
host:你服務器端的Ip地址。
protocol:默認填寫sftp即可。
port:默認填寫22。
username:服務器端的用戶名。
remotePath:服務器端存放本地代碼和數據的路徑。
password:服務器端的登錄密碼。
uploadOnSave:默認true。
syncMode:默認update
watcher:files可以默認為"/*",意思是監控當前文件夾下的所有文件,autoUpload,autoDelete也都默認為true,這樣你在新增或刪除任何東西的時候,本地和服務端都會實時保持同步
ignore:方式制定忽略同步的文件,比如一些很大的數據文件其實不需要被同步。
完成配置,在本地進行更改后點擊ctrl+s進行保存,刷新服務端對應的代碼文件,你會發現也被更新了。
5 快捷鍵說明
官方快捷鍵介紹:
https://code.visualstudio.com/docs/getstarted/keybindings
這里直接貼出官方快PDF文檔:
https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf
https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf
https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf
6 恢復默認配置
有的時候vscode出現問題,卸載重裝發現配置沒有改變,你可能想要完整的恢復全新配置(包括插件),可以刪除一下路徑里的內容
插件存放目錄:C:\Users\jimmy\.vscode\extensions
配置保存路徑:C:\Users\jimmy\AppData\Roaming\Code
7 結束語
本文章會隨着后續使用不斷更新,喜歡的可以關於一下我的博客。https://www.cnblogs.com/realjimmy/