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

編程語言 Python R語言 IDE 微軟 編程新世界 2018-12-04
VSCode系列1:提升R和Python使用體驗

已經攢了一系列 VS Code 寫作計劃和素材,之前也發過幾篇基礎知識的思維導圖(見文末)。不過一直不知道該從哪裡開始第一篇文章,如果推薦給身邊的人,他們可能最關心的是用 VS Code 日常寫簡單的 R 和 Python 代碼體驗如何。那就從這裡開始吧。

本文以 PC 作為安裝配置示例,Mac 基本類似且部分內容體驗可能更優。

為什麼是 VS Code(私信小編007即可自動獲取大量Python視頻教程以及各類PDF!)

既然是系列文章的開篇,姑且對主題按下不表先介紹一下 VS Code。

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

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

在 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 自帶的命令行工具。
VSCode系列1:提升R和Python使用體驗

  • 輸入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 測試代碼。

  • 鼠標放在一個函數上自動出現函數功能和使用方法
VSCode系列1:提升R和Python使用體驗

  • 鼠標放在一個內置數據集自動出現數據集介紹
VSCode系列1:提升R和Python使用體驗

  • 鼠標放在一個 R 包上自動出現 R 包介紹
VSCode系列1:提升R和Python使用體驗

  • 輸入部分函數自動提示
VSCode系列1:提升R和Python使用體驗

  • 鼠標在函數括號裡自動出現參數提示
VSCode系列1:提升R和Python使用體驗

  • 選中部分代碼,按一次ctrl+enter 自動進入集成終端,也就是 rtichoke
VSCode系列1:提升R和Python使用體驗

  • 再按一次ctrl+enter 自動執行代碼並輸出結果
VSCode系列1:提升R和Python使用體驗

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

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

自定義 R 必備快捷鍵

如果你是一個老實的 R 語言用戶,那麼一定不會用 = 代替 <-,但是 <- 需要按兩下鍵盤而且這兩個鍵位置還挺遠,更難過的是因為你用了語法提示如果你在<- 兩端沒有加上空格它還會給你出現「大破浪」下劃線噁心你。在 RStudio 中你可以使用 alt + - 一氣呵成輸入這四個符號<-,在 VS Code 中必須也可以。

打開 Keyboard Shortcuts (快捷鍵是 ctrl+k ctrl+s),在搜索框中搜索alt+s,這個時候你會看到這個快捷鍵已經被綁定了(別慌),點開 json 文件我們去給這個快捷鍵設置不同情境下新的含義。

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

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

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

配置 Python 插件

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

VSCode系列1:提升R和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 可以查看代碼中存在的問題。如下圖所示,錯誤報告中會提示問題,錯誤編號和所在行數位置,點擊某一個具體的問題後編輯器就會自動定位到相應的行數。

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

把某類文件關聯為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 使用介紹

  • https://code.visualstudio.com/docs/languages/python
  • https://code.visualstudio.com/docs/python/python-tutorial
  • https://code.visualstudio.com/docs/python/linting

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。

相關推薦

推薦中...