此文用于記(分)錄(享)我的VS Code環境配置(隻涉及通用化配置,不包含諸如自定義代碼段等定制化配置),主要用于算法/深度學習的日常開發,涉及語言為Python和C++,作業系統為Linux(偶爾用MAC OSX,極少用Windows),開發機器以遠端伺服器為主, 本地環境為輔。
PS: 這并不是一篇教你如何炫(zhuang)技(B)的文章,使用和配置IDE的前提是你 真正需要它 (适合自己的才是最好的,其實你是VIM黨,也可以直接無視本文),雖說 "工欲善其事必先利其器" ,但我還是建議多将時間花在鑽研技術或科研上。
- VS Code Customization
- Basic Settings
- Extensions
- Settings
- Color Theme & File Icon
- Editor
- Python Linting & Formatting
- C++ Linting & Formatting
- Debugging
- Remote-SSH
- SSH Key
- More Features
- Basic Settings
Basic Settings
首先是比較基礎的配置,包括
插件以及一些
settings配置(主要從碩士期間的編碼習慣以及在公司實習期間的開發狀況演變而來),此套配置方案比較适合從事深度學習/算法研究,使用Python和C++作為主要開發語言的童鞋。
Extensions
先羅列一下插件(
extensions):
- Python [ ms-python.python ]
- C/C++ [ ms-vscode.cpptools ]
- C/C++ Clang Command Adapter [ mitaki28.vscode-clang ]
- Markdown All in One [ yzhang.markdown-all-in-one ]
- GitLens [ eamodio.gitlens ]
- Remote-SSH [ ms-vscode-remote.remote-ssh ]
- Settings Sync [ shan.code-settings-sync ]
- Dracula Official [ dracula-theme.theme-dracula ]
- vscode-icons [ vscode-icons-team.vscode-icons ]
推薦插件
稍微解釋一下各個插件的功能與用途:
- 首先,代碼高亮和文法檢查是日常開發必須的, 這裡我直接選用微軟官方的 Python 和 C/C++ 這兩個插件, 針對 C/C++ 的文法檢查與代碼補全,我選用的是 C/C++ Clang Command Adapter ,後邊還會提到。
- 因為個人還經常使用markdown,這裡再加一款優秀的Markdown插件 Markdown All in One ,滿足日常開發需求。
- GitLens 則是代碼版本管理與合作開發方面的不二選擇。
- Remote-SSH 則可以說是VS Code最大的神器之一,讓遠端編寫/調式代碼變得異常舒适。
- 主題方面因為對粉紅色和紫色比較鐘愛,是以選擇了 Dracula ,圖示則是 vscode-icons 。
前面說了這些是我認為比較通用的插件,其他較為定制化的插件的使用,因人而異,請自行安裝與配置。
Settings
再來看一下配置檔案(
settings.json):
{
// theme
"workbench.colorTheme": "Dracula Soft",
"workbench.iconTheme": "vscode-icons",
// editor settings
"editor.renderIndentGuides": true,
"editor.formatOnSave": true,
"editor.insertSpaces": true,
"editor.mouseWheelZoom": true,
"editor.renderControlCharacters": true,
"editor.renderWhitespace": "boundary",
"files.eol": "n",
// python settings
"python.formatting.provider": "black",
"[python]": {
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
"editor.tabSize": 4
},
// c plus plus settings
"C_Cpp.clang_format_fallbackStyle": "Google",
"[cpp]": {
"editor.detectIndentation": true,
"editor.tabSize": 2
}
}
同樣,稍微解釋一下:
Color Theme & File Icon
# 顔色主題 Dracula Soft
# 圖示主題 vscode-icons
"workbench.colorTheme": "Dracula Soft",
"workbench.iconTheme": "vscode-icons",
吸血鬼主題/vscode Icon主題
Editor
# 顯示縮進參考線,很有用,特别是在嵌套很多層的時候
"editor.renderIndentGuides": true,
# 在儲存時對代碼進行格式化,非常有用
"editor.formatOnSave": true,
# 當按tab鍵是,用空格代替
# PS: 開啟這個可以充分避免因為tab鍵和space鍵混用而導緻的代碼一團糟
# 特别是在編寫python代碼的時候 XD
"editor.insertSpaces": true,
# 按住 Ctrl 鍵并滾動滑鼠滾輪時對編輯器字型大小進行縮放
# 如在meeting适,share螢幕下VS Code字型太小,就能進行調節
"editor.mouseWheelZoom": true,
# 顯示控制字元
# 這個也非常有用,有時候一些看不到的特殊字元可能會讓你debug半天
"editor.renderControlCharacters": true,
# 顯示空白字元
# 我使用的是 boundary 模式,這樣可以比較清晰地看到每行開頭和結尾的空格字元
"editor.renderWhitespace": "boundary",
# 檔案的EOL,統一成 "n",
# see https://stackoverflow.com/questions/1552749/difference-between-cr-lf-lf-and-cr-line-break-types
# 避免不同平台之間出現諸如"^M"等問題
"files.eol": "n",
PS:友情提示,你可以在json檔案中手動添加或者修改,也可以通過圖形界面進行選擇與修改, 下面放一張效果圖(可以仔細觀察一下右上和右下兩張圖的差別)
對應的通用配置項/配置得到的結果
Python Linting & Formatting
Python的代碼檢查與格式化,我使用了
isort+
black+
flake8的方案,類似的方案也可以在衆多開源項目中看到,如
FAIR的圖像分類訓練架構
pycls, 通用檢測訓練架構
Detectron2等等。
- isort 是一個專門用來對imports進行排序的工具
- 你可能經常會有到底import的這些package怎麼擺放,isort幫你統一解決了這個問題
- 官宣很有意思: isort your imports, so you don't have to.
- black 代替預設的pylint對代碼進行格式化
- 官方的說法是 Black is the uncompromising Python code formatter
- flake8 是目前比較常用的靜态代碼檢查工具
- 我個人認為團隊統一的代碼風格和開發規範是很重要的
# provider 選擇black
"python.formatting.provider": "black",
"[python]": {
# 在儲存 python 檔案的時候,用isort進行import 排序
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
# tab鍵占用4個字元
"editor.tabSize": 4
}
可以優先在自己使用conda環境中裝好(忘記裝也不要緊,Lint或者Format的時候VS Code會提示你):
conda install black flake8 isort -y
全部配置好後會産生如下效果:
-
進行檔案儲存ctrl + s
- 調用isort對imports進行排序
- 調用black進行代碼格式化
- 儲存結束
不管是團隊還是個人,統一的 Linting 和 Formatting 都是重要的,我們應該把精力花在coding本身,而不應該在代碼風格和排版上糾結
C++ Linting & Formatting
C++ 這裡,我簡單配置了
Google Style,從下面的配置也能看清晰看出
"C_Cpp.clang_format_fallbackStyle": "Google",
"[cpp]": {
"editor.detectIndentation": true,
"editor.tabSize": 2
}
- 大部分情況下還是推薦用 Clang-Format 來做 C++ 代碼風格管理,大家熟悉的 TensorFlow / PyTorch / Electron 等開源 C++ 項目均有使用
- 如果是做一些ICPC的比賽,更推薦直接使用 Vim / Code::Blocks ,或者更輕量級的 Sublime Text
Python和C++ lint/format 示例
Debugging
代碼調試這塊可能并不是VS Code的強項,對于一些小的項目或者比較單一的代碼段,使用預設的調試工具進行簡單調試即可,某些比較大型的項目,建議還是在terminal用GDB仔細調試。
debug示例
Remote-SSH
相對于本地調試,更多時候我們可能需要在遠端伺服器上進行實驗與開發工作,這個時候 Remote-SSH 這個神器就展現出它的優越性了
SSH Key
SSH的連接配接,主要有如下三種情況:
- SSH直連 : 比較懶惰的做法就是ssh直連到實驗室的伺服器上,這樣每次輸入賬号密碼就行了
- 免密登入 : 稍微舒服一點的做法是配置一下 ssh key ,做到免密登入
- generate a new ssh-key
- Jump跳闆機 : 通過配置
或者ProxyCommand
,實作跳過堡壘機/跳闆機, 關于如何配置 ProxyCommand/ProxyJump,推薦兩篇文章給大家,分别對應Windows和Linux,這裡我就不展開了ProxyJump
- VSCode Remote ssh跳闆機配置(windows)
- 雖然我不推薦使用windows作為日常開發的系統
- SSH 通過跳闆機直接通路内網機器(Linux/Mac OSX)
- VSCode Remote ssh跳闆機配置(windows)
# 直連,設定HostName 和 User 即可
Host v100-dota2
HostName v100.dota2-ai.com
User bigballon
# 再加上 IdentityFile 即可實作免密登入
Host 3090-dota2
HostName rtx3090.dota2-ai.com
User bigballon
IdentityFile ~/.ssh/id_ed25519_RTX3090
# 再配置 ProxyJump 實作Jump跳闆機
Host dota2-ai-lab
HostName lab.dota2-ai.com
User bg
IdentityFile ~/.ssh/id_ed25519_dota2
ProxyJump [email protected]
# ProxyJump 或 ProxyCommand 都可以
# 使用 ProxyJump 需要 OpenSSH > 7.3 才可以使用
More Features
Remote-SSH的功能 遠不止 通過SSH方式連接配接遠端伺服器 這麼簡單:
- 在remote端安裝對應的extension
- 選擇remote端的interpreter
- 與remote連接配接上的terminal,
可以到達與本地幾乎完全相同的使用體驗,甚至可以直接右鍵單擊檔案或檔案夾進行下載下傳, 将檔案或檔案夾拖拽進VS Code進行上傳,這樣你無需再開啟filezilla之類的傳輸工具, 而VS Code自帶的終端,也同步連接配接至遠端伺服器,而且支援多開,分屏等功能,幾乎所有的操作都可以在VS Code中完成
remote遠端連接配接示例
遠端插件的安裝
安裝後的效果
interpreter的選擇
完整功能展示
至此,你擁有了一個通用且較為舒适的 VS Code 開發環境, 無論是對于本地還是遠端伺服器的開發,配置同步,還是文法檢查/自動格式化與代碼調試,甚至是檔案上傳下載下傳終端操作等功能,它都是舒心的。 那麼接下來,全心投入到你的學習/研究或工作中去吧。
Do not cry for what you have lost,cherish for what you have experienced.本文同步釋出于我的 部落格 和 知乎專欄
歡迎轉載,請注明原文作者與出處
我家貓咪鎮樓 ~~