我的主力IDE跟Plugins

Yenlin Chen
Yenlin Chen
9 min readMar 4, 2021

--

簡單記錄及介紹我在Amazon上班及在平時私人時間寫code時,所使用的IDE及相關的plugins

My first pull request to the Rust programming language!

如果你期待看到Vim v.s. Emacs這種引戰文之類的東西,抱歉這篇要讓你失望了哈!單純只是想記錄一下目前對於我的主力IDE使用上的一些心得,以及在這個IDE上,有哪些增進工作效率的plugins。

廢話不多說,到底是哪個IDE?

我目前主要使用的IDE是Visual Studio Code,搭配一些好用的extensions (i.e. plugins,以下會簡單介紹)。「為什麼選擇它呢?」主要是因為:

1. Visual Studio Code本身是個完全open source的專案,所以如果哪一天真的很想要某個功能,或是某個bug is driving me crazy,我有貢獻upstream的選擇。
2. 完全免費。不管工作上或私下個人開發,都可以使用已經熟悉的同一套工具。

其實我在2015年開始工作時,曾經使用過Eclipse跟IntelliJ。使用Eclipse沒什麼特殊原因,就是看身邊同事蠻多人用的。但整體GUI的反應速度普通。2016年開始,因為需要寫Go的關係,所以就換到IntelliJ使用當時免費開放原始碼的Go plugin。大概2018年左右,Jet Brains宣布將停止維護Go plugin,並轉型成JetBrains下的專門針對Go的付費IDE:Goland。雖然Amazon支持工程師們在工作上使用自己喜歡的工具,所以購買licenses之類的事情不成問題。但我覺得如果在私人的時間裡,偶爾想開發點東西,也需要去付JetBrains年費的話,好像有點過頭,這也成了我換到VS Code的最後一根稻草。

VS Code使用者介面

其實現代的IDE介面跟功能都大同小異,autocomplete、auto syntax highlighting之類的都已經是必備的功能。

在圖形化的使用介面上,最左方的column內的這些圖示,點選後可以讓你使用內建的功能,例如:global搜尋、Git等等,有寫則是在安裝extensions後才會出現的,如我常用的自動TODO清單。剩下的區塊,就分別顯示專案內所有的directory structure、已開啟的程式碼檔案、virtual terminal等,都是IDE常見的功能。

我常用的VS Code Extensions

以下大略以使用頻率高到低排序。

Remote - SSH (Extension ID: ms-vscode-remote.remote-ssh)

Remote - SSH是微軟替VS Code開發的一款extension。主要功能就是讓使用者透過IDE的介面連接到一台遠端的電腦。所有我們將要改動的程式碼,都是儲存在這台遠端電腦上;所有安裝的extensions,也都會在這台遠端電腦上執行。即使底層實際上是使用SSH,但透過這個IDE的介面還是提供了一個頗為神奇的體驗,讓這些遠端操作感覺好像是在local執行的一般。

在個人使用上,這真的是我每一個工作天幾乎100%時間都在使用的extension。因為Amazon裡的每個工程師除了配有一台筆電,每個人還可以申請一到數台virtual machines。這些虛擬伺服器的規格從類似一般桌機,到數十核心跟GB記憶體的高效能網路伺服器都有。我利用這個extension,把所有的程式碼編輯、compile等等都在高效能的VM上執行,而筆電只是作為連接到這台遠端電腦的terminal而已。

Git Graph (Extension ID: mhutchie.git-graph)

這個extension提供一個頗為精美的Git branch示意圖,並簡化很多Git指令在GUI裡。例如:在commit/branch名稱上double click,就可以把HEAD reset到該commit/branch;在commit/branch上點右鍵,可以執行interactive rebase及各式Git指令;點選任意兩個commits,可以看到他們間的diff等等。都是非常實用的功能!

這是另外一個我幾乎每天都會使用的extension。最常使用的,就是快速切換branches、查看diff以及rebase等等。

Remote - Containers (Extension ID: ms-vscode-remote.remote-containers)

Remote - Containers是另一款微軟替VS Code開發的extension。主要其實跟Remote - SSH類似,一樣會在”另一台電腦”上執行extensions。最大的差別,是這“另一台電腦”其實是在local運行的Docker container,而程式碼則是透過bindmount mount進去container中。也因為開發環境實際上是Docker container的關係,使用者可以自由地客製化自己喜愛的環境。

這是我在私人開發時,很常使用的extension。我把自己常用的開發環境Docker images發佈在Dockerhub,相對應的Dockerfiles也可以在GitHub上找到,有興趣可以參考一下!

Bookmarks (Extension ID: alefragnani.bookmarks)

基本上,這個extension讓我們能隨意地將任意檔案中的某些行標記起來存成書籤,並在它們間快速切換。

在我的使用習慣中,這個extension十分適合在探索一個新的codebase時,或在一個新的codebase中寫code時,因為不熟悉所以會常需要在多個檔案間切換的動作。

PlantUML (Extension ID: jebbs.plantuml)

這是一個蠻特別的extension。基本上概念跟LaTeX很像,讓使用者可以專心於內容而不用擔心排版問題。

在工作上,幾乎每個系統設計需要繪製架構圖或流程圖時,我都會使用到PlantUML。如果有興趣的朋友可以在下面留言,我再另外寫一篇文章跟大家分享一些使用心得。

Code Spell Checker (Extension ID: streetsidesoftware.code-spell-checker)

基本上就是一個檢查英文錯字的extension,免得有時候打字快難免出錯。比較特別一點的是,它可以辨識camelCase的變數名稱,所以像類似ItemCount這種平常文字編輯器(如MS Word之類的)會認為的錯字,這個extension可以正確地解析知道那其實是兩個字。

Go (Extension ID: golang.go)

寫Go code必備的extension,提供進階的功能如:auto-import, find all references等功能。我自己常使用Go來撰寫backend services或是可以接受garbage collection latency的agents。

rust-analyzer (Extension ID: matklad.rust-analyzer)

雖然目前在工作上還沒什麼用到Rust的機會,但我對於Rust很有興趣,也斷斷續續地把The Rust Programming Language看完了。對於想要多瞭解Rust的朋友,可以參考之前我發表的這篇感想

其實在VS code marketplace裡,有兩個Rust extensions: rust-lang.rust及matklad.rust-analyzer。根據我G̶o̶o̶g̶l̶e̶不科學的研究及個人使用體驗,我覺得rust-analyzer似乎比較responsive一些。

Todo Tree (Extension ID: gruntfuggly.todo-tree)

這個extension會自動把所有程式碼中的類似於TODO的comments都抓出來,並整理成一個乾淨的清單,便於開發者快速地查看所有程式碼中還需要改善的地方。

Rewrap (Extension ID: stkb.rewrap)

簡單但好用的小extension。基本上使用時機就是寫markdown檔或block comments時,常常情不自禁就把一整個paragraph寫在一行上了。雖然寫的人很開心,但code reviewers讀起來就不是很愉悅了。所以為了體諒別人,就使用這個extension把很長的一行字好好地分行吧!

Vim (Extension ID: vscodevim.vim)

這個extension可以讓你在VS Code裡使用許多Vim的快捷鍵。值得注意的是在Ubuntu上,啟用這個extension後似乎會conflicts原本許多會使用到ctrl的快捷鍵,所以如果你跟我一樣喜歡混搭使用的話,可能要注意一下哦!

其實我不是很確定為什麼即使記得的Vim shortcuts就那麼幾個,但還是堅持在每個IDE都啟用類似的功能。可能是5年前開始的習慣回不去了吧?

--

--

Yenlin Chen
Yenlin Chen

Software Engineer/Aspiring Videographer & Photographer