VS Code 系列 1:提升 R 和 Python 使用體驗

已經攢了一系列 VS Code 寫作計劃和素材,之前也發過幾篇基礎知識的思維導圖(見文末)。不過一直不知道該從哪裡開始第一篇文章,如果推薦給身邊的人,他們可能最關心的是用 VS Code 日常寫簡單的 R 和 Python 程式碼體驗如何。那就從這裡開始吧。
本文以 PC 作為安裝配置示例,Mac 基本類似且部分內容體驗可能更優。
為什麼是 VS Code
既然是系列文章的開篇,姑且對主題按下不表先介紹一下 VS Code。
ofollow,noindex">VS Code 的全稱是 Visual Studio Code,官方給他的定義是官方定義是 一個免費的、開源的跨平臺編輯器 。相對於各種 IDE 而言,編輯器則相對更輕量,更側重於檔案或者資料夾而非巨集大的專案。
2011 年底,微軟從 IBM 請 《設計模式》的作者同時也是 Eclipse 掌舵人之一的 Erich Gamma 來開發一款優雅的線上開發工具(後來的 Manaco Editor),2015年他把這款線上工具移植到了桌面平臺,也就有了如今 VS Code 。師承 Eclipse 同時又吸取 Eclipse 的教訓,他們決定核心只做一個高效能的輕量級編輯器,個性化功能交給外掛系統來完成且要把外掛系統執行在主程序之外。同時,VS Code 希望讓開發者在編輯器裡擁有 IDE 類似的開發體驗,比如對原始碼的智慧理解、圖形化除錯工具和版本管理等等。總之,就是在 IDE 和編輯器中找到一個比較理想的平衡。
在很多人的印象中,微軟一直是一個站在開源世界對立面,靠專利官司和壟斷掙錢的公司,但其實微軟近幾年一直是 GitHub 貢獻開原始碼最活躍的公司,活躍到現在已經把 GitHub 收購了(黑人問號臉)。而在所有微軟的開源專案中,star 最高的 repo 就是 VS Code 編輯器。VS Code 以 MIT 協議開源,所有的開發過程和反饋渠道完全在 GitHub 開放,同時 VS Code 提供了統一的 Language Server Protocol 和 Code Debugging Protocol API,所有語言的開發和都能夠通過實現兩個 API 在 VS Code 上得到類似 IDE 的開發和除錯體驗。
如果你是一個 R 語言使用者,RStudio 一定是首選 IDE,如果你是一個 Python 使用者,Pycharm 則是大多數人的編輯器。但如果你平時既要用點 R,也要用點 Python,偶爾感覺這些 IDE 有點臃腫或者不想在兩個 IDE 中反覆切換,那麼 VS Code 是一個不錯的選擇。
VS Code 有兩個不同版本:穩定版(Stable)每月釋出更新一次;預覽版(Insiders)每個工作日更新一個版本。當然,你也可以同時安裝兩個版本互不影響。
雖然我一直不喜歡微軟的 office ,但是 VS Code 又讓我對微軟增加了不少好看。現在我日常工作中,輕度碼字、寫指令碼、閱讀 PDF 和 Excel 文字甚至檢視壓縮檔案等工作都可以在它上面完成。離「只用一個 VS Code 完成所有事情」的目標已經不太遠了。當然,如果還有什麼需求沒有實現,最牛的是學習自己去寫一個外掛。
安裝 R 和 Python
因為這篇文章的寫作目的是「用 VS Code 愉快地使用 R 和 Python 」,所以預設看官已經可以自主地在電腦上安裝 R 和 Python ;因為是系列文章的首篇,所以暫且不涉及複雜操作和各種使用技巧;因為預設大家是同時 輕度 使用 R 和 Python 所以暫時不涉及程式碼除錯和版本管理等內容。在後面的文章中這些都會提到。
對於 Windows 使用者 R 可以在 官網 下載,Python 建議安裝 anaconda 的 Python3 版本。另外這裡有一篇 關於R安裝注意事項 的文章可以作為參考。
配置 R 外掛
VS Code 對語言的支援方式是提供統一的開發 API,即 Language Server Protocol。各種語言可以能夠通過這個 API 在 VS Code 上得到類似 IDE 的體驗,這種服務在 VS Code 中稱為 語言服務 。
語言服務會根據我們的專案、當前檔案和游標所在位置為我們提供一個建議列表,包括在當前游標位置下我們可能會輸入的各種程式碼函式。隨著字元的輸入 VS Code 會根據字元輸入內容自動對列表進行過濾。
目前 JavaScript、Python、PHP 等幾大主流語言在 VS Code 中都已經有很完善的支援,但是 R 核心外掛還是第三方貢獻的,想要配置的順手還需要一些操作。實現 R 語言服務必需要有如下前兩個外掛(外掛管理可以在左側側邊欄找到,然後在搜尋框裡搜尋 R
即可)。
R support for Visual Studio Code
這個外掛是 VS Code 中 R 的核心外掛,具有語法高亮,基礎程式碼片段和程式碼執行等功能。例如你可以在編輯器中選擇某幾行內容,然後使用 ctrl + enter
將程式碼傳送到終端執行。
R LSP Client
這個外掛在主頁的介紹是
R language support for VS Code , powered by the R language server .
也就是我們上文提到的「Language Server Protocol」,有了這個它就可以進行 程式碼補全、檢視函式定義以及引數預覽 了。不過想讓它生效還需要下面幾個小步驟:
在 R 中安裝 languageserver
包
install.packages("languageserver")
,只有安裝了這個包才能實現 R 和 編輯器的同步。
在 VS Code 中設定正確的 R 路徑
開啟設定介面,在搜尋框中輸入 r.rterm
,找到 Rterm:Windows ,在編輯欄中輸入你的 R 可執行檔案位置。如果是預設安裝的 R 3.5.1 版本,位置應該是 C:\Program Files\R\R-3.5.1\bin\x64\R.exe

在 VS Code 中設定正確的 R LSP 路徑
和上面的方法相同,只不過這次搜尋 r.rpath.lsp
,目錄和你的 r.rtrem.windows
一致即可。
完成上面幾項設定,接下來使用 ctrl+shist+p
調出命令面板,然後輸入 reload
, 選擇 Reload Window 執行 ,重啟 VS Code 即可。
目前 VS Code 已經實現了介面化設定,但是其本質是一個json 格式的配置檔案,你也可以在配置檔案中進行修改和編輯。
rtichoke
RStudio 中的 R Console 本身具備引數提示和補全等功能,很多人非常喜歡。然而到目前為止,如果直接在 VS Code 中執行 R 程式碼,它預設呼叫的是我們之前設定過的官方 R 終端,這個終端非常古老而且不友好。不過好在我們的「21 世紀 R console」 rtichoke 即將登場。
說到 rtichoke 有不少人都知道它可以實現多行編輯、語法高亮和自動完成等功能,用起來基本不輸RStudio。不過他們中 99% 的人都是在 Linux 或者 macOS 中使用。因為這個軟體本身是 Python 寫的並且需要用命令列 pip
安裝,很多 windows 使用者心理嘀咕一句「tmd,windows 竟然不能用」然後卒,其實你是自己把自己放棄了。好在我還是那剩下的 1% 裡在 Windows 使用 rtichoke 的使用者,使用方法如下。
- 在上文中你應該已經成功使用 anaconda 在你的電腦裡裝好了 Python,現在開啟
Anaconda Prompt
,也就是anaconda 自帶的命令列工具。

- 輸入
pip install -U rtichoke
安裝 rtichoke - 安裝完成後輸入
rtichoke
測試是否呼叫成功 - 找到並進入你電腦裡的anaconda scripts 目錄,正常情況下是
C:\Users\youname\Anaconda3\Scripts\
- 不出意外裡面應該有一個 exe 檔案,叫做
rtichoke.exe
,找到它並複製它的路徑 - 在 VS Code 中重新設定
r.term.windows
為rtichoke.ext
路徑 - 找到
r.rterm.option
選項,並在配置檔案(json 格式)中登出掉這個選項下的--no-save
和no-restore
引數 - 重啟 VS Code 後大功告成
R 執行使用效果
現在 R 執行的配置工作已經完成,一起來看下效果。首先,我在工作專案中開啟一個R 指令碼 test.R
,裡面是一段 plotly
測試程式碼。
- 滑鼠放在一個函式上自動出現函式功能和使用方法

- 滑鼠放在一個內建資料集自動出現數據集介紹

- 滑鼠放在一個 R 包上自動出現 R 包介紹

- 輸入部分函式自動提示

- 滑鼠在函式括號裡自動出現引數提示

- 選中部分程式碼,按一次
ctrl+enter
自動進入整合終端,也就是 rtichoke

- 再按一次
ctrl+enter
自動執行程式碼並輸出結果

如果想呼叫 View 等外部輸出也是可以的,比如 View(tmp2)
會彈出一個 R 預設終端的獨立顯示框,比如測試程式碼最後是 print
一個 plotly 的繪圖結果,那麼它會自動呼叫你的預設瀏覽器進行輸出。

自定義 R 必備快捷鍵
如果你是一個老實的 R 語言使用者,那麼一定不會用 =
代替 <-
,但是 <-
需要按兩下鍵盤而且這兩個鍵位置還挺遠,更難過的是因為你用了語法提示如果你在 <-
兩端沒有加上空格它還會給你出現「大破浪」下劃線噁心你。在 RStudio 中你可以使用 alt + -
一氣呵成輸入這四個符號 <-
,在 VS Code 中必須也可以。
開啟 Keyboard Shortcuts (快捷鍵是 ctrl+k ctrl+s
),在搜尋框中搜索 alt+s
,這個時候你會看到這個快捷鍵已經被綁定了(別慌),點開 json 檔案我們去給這個快捷鍵設定不同情境下新的含義。

點開快捷鍵配置檔案之後不要管左邊的內容,直接去右邊設定就好,配置方法如圖(至於為什麼這麼寫,後面會寫專門的快捷鍵相關文章)。從此以後在 R 或者 Rmd 檔案裡 alt+-
就變成了和 RStudio 一樣的快捷鍵。

配置 Python 外掛
如果把 R 的配置搞定,Python 的配置就顯得很簡單了。想愉快地使用 Python 只需要安裝一個 Python 外掛即可。

接下來設定預設的 Python 路徑,如果是用 anaconda 預設安裝路徑應該是 C:\Users\yourname\Anaconda3\python.exe
,這時使用的是預設 Python 直譯器;與 R 同理,如果你想使用 anaconda 中的 ipython 那麼可以把路徑設定為 C:\Users\yourname\Anaconda3\Scripts\ipython.exe
。
錯誤提示和格式化
安裝和配置
Python 預設的語法提示工具是 PyLint,也可以選擇其他的 linter 工具,比如 flake8 ,flake8 是 Python 官方釋出的一款靜態程式碼檢查工具,如果想使用它的話首先在 anaconda 的命令列工具中安裝 pip install flake8
;另外,在儲存程式碼的時候 VS Code 可以自動進行 code formatting ,這個功能預設是關閉的且工具是 autopep8 ,如果想使用 yafp ,則繼續在命令列工具中安裝 pip install yapf
。
安裝好這兩個工具之後在 VS Code 的配置檔案中進行設定:
"python.linting.enabled": true "python.linting.flake8Enabled": true, "python.formatting.provider": "yapf"
檢視錯誤和修改
在集中終端的 PROBLEMS 可以檢視程式碼中存在的問題。如下圖所示,錯誤報告中會提示問題,錯誤編號和所在行數位置,點選某一個具體的問題後編輯器就會自動定位到相應的行數。

把某類檔案關聯為Python
在有些時候我們想借助某些語法的高亮特性,但是預設檔案字尾卻不是編輯能識別的內容。例如,我日常會用到的一類 snakfile
為字尾的檔案。那麼可以做如下設定
"files.associations": { "Snakefile": "python" }
禁止對某些檔案進行檢查
從上面的截圖可以發現,我一個檔案中竟然有 915 處問題,看來我這個智商基本就告別 Python 了。如果為了自我麻痺,我可以在設定中關閉程式碼檢查,但真實情況是這個檔案並不是一個真正的 Python 指令碼,我只是想借用Python 的語法高亮而已。
針對這種情況,我們可以選擇單獨對某一類(字尾)檔案排除語法檢查。比如我用 Python 語法高亮的這類非Python 檔案字尾通常我會被我命名為 snakefile
,那就可以進行如下設定:
"python.linting.ignorePatterns": [ ".vscode/*.py", "**/site-packages/**/*.py", "*.snakefile" ]
重啟之後,在開啟原檔案,滿屏的大波浪紅線就無影無蹤了。
注意,如果想讓上面配置生效,需要確保 "python.jediEnabled": ture
當然,因為 VS Code 對 Python 的完善支援,在設定中還有非常多的相關引數可以調整,你可以在設定的搜尋框中輸入 python
瀏覽一下,但因為我們本文預設是輕度編寫程式碼就不在展開了。
另外,也可以參考官方的一些 Python 使用介紹
windows 使用者的一個痛點
在文章開始,我說「本文以 PC 作為安裝配置示例,Mac 基本類似且部分內容體驗可能更優」,現在就表達一下這個小小的遺憾。隨著 win10 的升級,Windows 已經可以安裝自己的 Ubuntu 系統 「Windows Subsystem for Linux」,但是系統自帶的 bash 那叫一個醜陋和難用。由於 VS Code 在整合終端上下了不少功夫,其實我一直都把它當成我的簡潔版「XShell」來使用,體驗也非常好。如果你想試試,只需要在配置檔案中把 terminal.integrated.shell.windows
由預設的 C:\\Windows\\System32\\cmd.exe
改為 C:\\Windows\\System32\\bash.exe
,這個具體內容以後再寫。但是如果 在這個 bash 裡除錯 Python 是會出問題的 ,修改起來即便能姑且使用也是拆了東牆補西牆。我暫時的解決方法是在預覽版的 VS Code 中修改了預設的 terminal,在穩定版裡還用 cmd.exe。
VS Code 基礎知識思維導圖