VSCode 的奇技淫巧
Yukai Huang
Study4TW .NET Conf 2019
關於我
- Yukai
- HackMD 開發者 & 粉專小編
- VSCode Taiwan 粉專小編
信仰
- 我用
neovim VSCode 寫扣!
- 我用
空格 TAB 縮排!

總之就是炫炮
Outline
VSCode 簡介的部分
VSCode 獨步全球的部分
VSCode 奇技淫巧的部分
Editor
- 輕量
- 可以「支援」多種語言的語法上色
- 鍵盤為中心
- 自己的工作流程自己弄
- vim, emacs, sublime, …
IDE
- 專案系統
- 程式碼理解:跳轉定義、重構
- 內建除錯
- 介面設計
- Visual Studio, XCode, JetBrains 系列…
- …
從 Editor 往 IDE 靠近
- 維持編輯器的輕量高效
- 導入專案的概念
- 除錯器
- 語言支援(不只是程式碼上色)
- 任務管理
- …
-
Built with Electron Framework
-
Cross Platform (Windows/macOS/Linux)
-
Open source under MIT License
Electron Framework
用網頁技術打造跨平臺的桌面應用程式
HTML/CSS/JavaScript
- Slack
- Discord
- Microsoft Teams
- Figma
- GitKraken
- …
Electron Framework
就是因此誕生
語言伺服器通訊協定
編輯器或 IDE
與語言伺服器
溝通的協定
實作 IDE 的各種功能
- Code completion
- Hover
- Jump to def
- Workspace symbols
- Find references
- Diagnostics
- …
(langserver.org)
- Neovim: coc.nvim (neovim,激推!)
- Sublime: Sublime LSP
- Atom: Atom IDE
- …
要把 VIM 改裝成 真 IDE
就靠 LSP 啦!
歡迎大家跳槽 neovim
還有個東西叫
Debug Adapter Protocol
- Code
- Terminal
- Server
- Audio
- Chat
- …
go get -u -v github.com/denandz/sourcemapper
ruby -run -e httpd -- . -p 8000
sourcemapper \
-url http://localhost:8000/extension-prod.js.map \
-output src

OT 演算法
Operational Transformation

from wikipedia
大會共筆麻煩略過這一段謝謝 
Language Server, Debugger, Workspace Extension Process…
放到 Remote 跑
介面那些還是放在本機

Visual Studio Online "Monaco"(2013)

Monaco Editor

Visual Studio Online (2019)
“那真是太諷刺了,紹安,你離開你師傅繞了一大圈,最後到達的境界,竟然是你不想學 ... 還是要回到故鄉來的,這個四千里長江的盡頭上海,或許正是你的極限也說不定。”
欸不是啦!
集大成者


噢對了 Visual Studio Online 有自架版 (self-hosted)
Alternatives
- code server
- theia IDE (gitpod)
- CodeSandbox
- Eclipse Che
- Cloud9
- …
VSCode 獨步全球的部分
-
Visual Studio Live Share
-
Remote Development
-
Visual Studio Online
Git/GitHub 擴充功能大補帖
-
GitLens
-
GitHub Pull Requests
-
Git Graph
Git/GitHub 擴充功能大補帖
-
→ GitLens
-
GitHub Pull Requests
-
Git Graph
-
Git Blame
-
File History
-
Browse commit
-
Link to GitHub
-
…
三個我最常用的功能
-
檢視某個 commit 下的原始碼
-
檔案修改歷史
-
整個目錄比較
檢視某個 commit 下的原始碼
(Explore Repository from Revision)


免 git subtree!
整個目錄比較
Compare Ancestry with Working Tree

Git/GitHub 擴充功能大補帖
-
GitLens
-
→ GitHub Pull Requests
-
Git Graph
Git/GitHub 擴充功能大補帖
-
GitLens
-
GitHub Pull Requests
-
→ Git Graph

hackmdio/codimd
在 Programming Fonts
選一套超讚的字體
順帶一題
我用的是 Menlo (Editor) + Iosevka (Terminal)
A UI colors + B syntax colors
寫進 preference overwrite
Custom UI

Custom CSS

Essence (already dead
)

上 VSCode Marketplace 搜尋 PTT


map-replace.js
來寫 VSCode Extensions!
- 用 VSCode 開發
- TypeScript 絕佳開發體驗
有點紅海了
VSCode 簡介的部分
VSCode 獨步全球的部分
VSCode 奇技淫巧的部分