VS Code 系列 1:提升 R 和 Python 使用體驗(yàn)

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

本文以 PC 作為安裝配置示例,Mac 基本類似且部分內(nèi)容體驗(yàn)可能更優(yōu)。

為什么是 VS Code

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

VS Code 的全稱是 Visual Studio Code,官方給他的定義是官方定義是一個(gè)免費(fèi)的、開源的跨平臺(tái)編輯器。相對(duì)于各種 IDE 而言,編輯器則相對(duì)更輕量,更側(cè)重于文件或者文件夾而非宏大的項(xiàng)目。

2011 年底,微軟從 IBM 請(qǐng) 《設(shè)計(jì)模式》的作者同時(shí)也是 Eclipse 掌舵人之一的 Erich Gamma 來開發(fā)一款優(yōu)雅的在線開發(fā)工具(后來的 Manaco Editor),2015年他把這款在線工具移植到了桌面平臺(tái),也就有了如今 VS Code 。師承 Eclipse 同時(shí)又吸取 Eclipse 的教訓(xùn),他們決定核心只做一個(gè)高性能的輕量級(jí)編輯器,個(gè)性化功能交給插件系統(tǒng)來完成且要把插件系統(tǒng)運(yùn)行在主進(jìn)程之外。同時(shí),VS Code 希望讓開發(fā)者在編輯器里擁有 IDE 類似的開發(fā)體驗(yàn),比如對(duì)源代碼的智能理解、圖形化調(diào)試工具和版本管理等等。總之,就是在 IDE 和編輯器中找到一個(gè)比較理想的平衡。

在很多人的印象中,微軟一直是一個(gè)站在開源世界對(duì)立面,靠專利官司和壟斷掙錢的公司,但其實(shí)微軟近幾年一直是 GitHub 貢獻(xiàn)開源代碼最活躍的公司,活躍到現(xiàn)在已經(jīng)把 GitHub 收購了(黑人問號(hào)臉)。而在所有微軟的開源項(xiàng)目中,star 最高的 repo 就是 VS Code 編輯器。VS Code 以 MIT 協(xié)議開源,所有的開發(fā)過程和反饋渠道完全在 GitHub 開放,同時(shí) VS Code 提供了統(tǒng)一的 Language Server Protocol 和 Code Debugging Protocol API,所有語言的開發(fā)和都能夠通過實(shí)現(xiàn)兩個(gè) API 在 VS Code 上得到類似 IDE 的開發(fā)和調(diào)試體驗(yàn)。

如果你是一個(gè) R 語言用戶,RStudio 一定是首選 IDE,如果你是一個(gè) Python 用戶,Pycharm 則是大多數(shù)人的編輯器。但如果你平時(shí)既要用點(diǎn) R,也要用點(diǎn) Python,偶爾感覺這些 IDE 有點(diǎn)臃腫或者不想在兩個(gè) IDE 中反復(fù)切換,那么 VS Code 是一個(gè)不錯(cuò)的選擇。

VS Code 有兩個(gè)不同版本:穩(wěn)定版(Stable)每月發(fā)布更新一次;預(yù)覽版(Insiders)每個(gè)工作日更新一個(gè)版本。當(dāng)然,你也可以同時(shí)安裝兩個(gè)版本互不影響。

雖然我一直不喜歡微軟的 office ,但是 VS Code 又讓我對(duì)微軟增加了不少好看。現(xiàn)在我日常工作中,輕度碼字、寫腳本、閱讀 PDF 和 Excel 文本甚至查看壓縮文件等工作都可以在它上面完成。離「只用一個(gè) VS Code 完成所有事情」的目標(biāo)已經(jīng)不太遠(yuǎn)了。當(dāng)然,如果還有什么需求沒有實(shí)現(xiàn),最牛的是學(xué)習(xí)自己去寫一個(gè)插件。

安裝 R 和 Python

因?yàn)檫@篇文章的寫作目的是「用 VS Code 愉快地使用 R 和 Python 」,所以默認(rèn)看官已經(jīng)可以自主地在電腦上安裝 R 和 Python ;因?yàn)槭窍盗形恼碌氖灼詴呵也簧婕皬?fù)雜操作和各種使用技巧;因?yàn)槟J(rèn)大家是同時(shí)輕度使用 R 和 Python 所以暫時(shí)不涉及代碼調(diào)試和版本管理等內(nèi)容。在后面的文章中這些都會(huì)提到。

對(duì)于 Windows 用戶 R 可以在 官網(wǎng) 下載,Python 建議安裝 anaconda 的 Python3 版本。另外這里有一篇 關(guān)于R安裝注意事項(xiàng) 的文章可以作為參考。

配置 R 插件

VS Code 對(duì)語言的支持方式是提供統(tǒng)一的開發(fā) API,即 Language Server Protocol。各種語言可以能夠通過這個(gè) API 在 VS Code 上得到類似 IDE 的體驗(yàn),這種服務(wù)在 VS Code 中稱為語言服務(wù)

語言服務(wù)會(huì)根據(jù)我們的項(xiàng)目、當(dāng)前文件和光標(biāo)所在位置為我們提供一個(gè)建議列表,包括在當(dāng)前光標(biāo)位置下我們可能會(huì)輸入的各種代碼函數(shù)。隨著字符的輸入 VS Code 會(huì)根據(jù)字符輸入內(nèi)容自動(dòng)對(duì)列表進(jìn)行過濾。

目前 JavaScript、Python、PHP 等幾大主流語言在 VS Code 中都已經(jīng)有很完善的支持,但是 R 核心插件還是第三方貢獻(xiàn)的,想要配置的順手還需要一些操作。實(shí)現(xiàn) R 語言服務(wù)必需要有如下前兩個(gè)插件(插件管理可以在左側(cè)側(cè)邊欄找到,然后在搜索框里搜索R即可)。

R support for Visual Studio Code

這個(gè)插件是 VS Code 中 R 的核心插件,具有語法高亮,基礎(chǔ)代碼片段和代碼執(zhí)行等功能。例如你可以在編輯器中選擇某幾行內(nèi)容,然后使用ctrl + enter將代碼發(fā)送到終端執(zhí)行。

R LSP Client

這個(gè)插件在主頁的介紹是

R language support for VS Code, powered by the R language server.

也就是我們上文提到的「Language Server Protocol」,有了這個(gè)它就可以進(jìn)行代碼補(bǔ)全、查看函數(shù)定義以及參數(shù)預(yù)覽了。不過想讓它生效還需要下面幾個(gè)小步驟:

在 R 中安裝 languageserver

install.packages("languageserver"),只有安裝了這個(gè)包才能實(shí)現(xiàn) R 和 編輯器的同步。

在 VS Code 中設(shè)置正確的 R 路徑

打開設(shè)置界面,在搜索框中輸入 r.rterm,找到 Rterm:Windows ,在編輯欄中輸入你的 R 可執(zhí)行文件位置。如果是默認(rèn)安裝的 R 3.5.1 版本,位置應(yīng)該是C:\Program Files\R\R-3.5.1\bin\x64\R.exe

在 VS Code 中設(shè)置正確的 R LSP 路徑

和上面的方法相同,只不過這次搜索r.rpath.lsp,目錄和你的r.rtrem.windows 一致即可。

完成上面幾項(xiàng)設(shè)置,接下來使用ctrl+shist+p 調(diào)出命令面板,然后輸入reload選擇 Reload Window 執(zhí)行 ,重啟 VS Code 即可。

目前 VS Code 已經(jīng)實(shí)現(xiàn)了界面化設(shè)置,但是其本質(zhì)是一個(gè)json 格式的配置文件,你也可以在配置文件中進(jìn)行修改和編輯。

radian

RStudio 中的 R Console 本身具備參數(shù)提示和補(bǔ)全等功能,很多人非常喜歡。然而到目前為止,如果直接在 VS Code 中執(zhí)行 R 代碼,它默認(rèn)調(diào)用的是我們之前設(shè)置過的官方 R 終端,這個(gè)終端非常古老而且不友好。不過好在我們的「21 世紀(jì) R console」 radian 即將登場(chǎng)。

說到 radian 有不少人都知道它可以實(shí)現(xiàn)多行編輯、語法高亮和自動(dòng)完成等功能,用起來基本不輸RStudio。不過他們中 99% 的人都是在 Linux 或者 macOS 中使用。因?yàn)檫@個(gè)軟件本身是 Python 寫的并且需要用命令行pip安裝,很多 windows 用戶心理嘀咕一句「tmd,windows 竟然不能用」然后卒,其實(shí)你是自己把自己放棄了。好在我還是那剩下的 1% 里在 Windows 使用 radian 的用戶,使用方法如下。

  • 在上文中你應(yīng)該已經(jīng)成功使用 anaconda 在你的電腦里裝好了 Python,現(xiàn)在打開Anaconda Prompt,也就是anaconda 自帶的命令行工具。
  • 輸入pip install -U rtichoke 安裝 rtichoke
  • 安裝完成后輸入radian測(cè)試是否調(diào)用成功
  • 找到并進(jìn)入你電腦里的anaconda scripts 目錄,正常情況下是 C:\Users\youname\Anaconda3\Scripts\
  • 不出意外里面應(yīng)該有一個(gè) exe 文件,叫做 radian.exe,找到它并復(fù)制它的路徑
  • 在 VS Code 中重新設(shè)置r.term.windowsradian.ext 路徑
  • 找到r.rterm.option 選項(xiàng),并在配置文件(json 格式)中注銷掉這個(gè)選項(xiàng)下的--no-saveno-restore參數(shù)
  • 重啟 VS Code 后大功告成

R 運(yùn)行使用效果

現(xiàn)在 R 運(yùn)行的配置工作已經(jīng)完成,一起來看下效果。首先,我在工作項(xiàng)目中打開一個(gè)R 腳本 test.R,里面是一段plotly 測(cè)試代碼。

  • 鼠標(biāo)放在一個(gè)函數(shù)上自動(dòng)出現(xiàn)函數(shù)功能和使用方法
  • 鼠標(biāo)放在一個(gè)內(nèi)置數(shù)據(jù)集自動(dòng)出現(xiàn)數(shù)據(jù)集介紹
  • 鼠標(biāo)放在一個(gè) R 包上自動(dòng)出現(xiàn) R 包介紹
  • 輸入部分函數(shù)自動(dòng)提示
  • 鼠標(biāo)在函數(shù)括號(hào)里自動(dòng)出現(xiàn)參數(shù)提示
  • 選中部分代碼,按一次ctrl+enter 自動(dòng)進(jìn)入集成終端,也就是 rtichoke
  • 再按一次ctrl+enter 自動(dòng)執(zhí)行代碼并輸出結(jié)果

如果想調(diào)用 View 等外部輸出也是可以的,比如View(tmp2) 會(huì)彈出一個(gè) R 默認(rèn)終端的獨(dú)立顯示框,比如測(cè)試代碼最后是print 一個(gè) plotly 的繪圖結(jié)果,那么它會(huì)自動(dòng)調(diào)用你的默認(rèn)瀏覽器進(jìn)行輸出。

自定義 R 必備快捷鍵

如果你是一個(gè)老實(shí)的 R 語言用戶,那么一定不會(huì)用 = 代替 <-,但是 <- 需要按兩下鍵盤而且這兩個(gè)鍵位置還挺遠(yuǎn),更難過的是因?yàn)槟阌昧苏Z法提示如果你在<- 兩端沒有加上空格它還會(huì)給你出現(xiàn)「大破浪」下劃線惡心你。在 RStudio 中你可以使用 alt + - 一氣呵成輸入這四個(gè)符號(hào)<-,在 VS Code 中必須也可以。

打開 Keyboard Shortcuts (快捷鍵是 ctrl+k ctrl+s),在搜索框中搜索alt+s,這個(gè)時(shí)候你會(huì)看到這個(gè)快捷鍵已經(jīng)被綁定了(別慌),點(diǎn)開 json 文件我們?nèi)ソo這個(gè)快捷鍵設(shè)置不同情境下新的含義。

點(diǎn)開快捷鍵配置文件之后不要管左邊的內(nèi)容,直接去右邊設(shè)置就好,配置方法如圖(至于為什么這么寫,后面會(huì)寫專門的快捷鍵相關(guān)文章)。從此以后在 R 或者 Rmd 文件里alt+-就變成了和 RStudio 一樣的快捷鍵。

配置 Python 插件

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

接下來設(shè)置默認(rèn)的 Python 路徑,如果是用 anaconda 默認(rèn)安裝路徑應(yīng)該是C:\Users\yourname\Anaconda3\python.exe ,這時(shí)使用的是默認(rèn) Python 解釋器;與 R 同理,如果你想使用 anaconda 中的 ipython 那么可以把路徑設(shè)置為 C:\Users\yourname\Anaconda3\Scripts\ipython.exe

錯(cuò)誤提示和格式化

安裝和配置

Python 默認(rèn)的語法提示工具是 PyLint,也可以選擇其他的 linter 工具,比如 flake8,flake8 是 Python 官方發(fā)布的一款靜態(tài)代碼檢查工具,如果想使用它的話首先在 anaconda 的命令行工具中安裝pip install flake8;另外,在保存代碼的時(shí)候 VS Code 可以自動(dòng)進(jìn)行 code formatting ,這個(gè)功能默認(rèn)是關(guān)閉的且工具是 autopep8 ,如果想使用 yafp,則繼續(xù)在命令行工具中安裝 pip install yapf

安裝好這兩個(gè)工具之后在 VS Code 的配置文件中進(jìn)行設(shè)置:

"python.linting.enabled": true
"python.linting.flake8Enabled": true,
"python.formatting.provider": "yapf"

查看錯(cuò)誤和修改

在集中終端的 PROBLEMS 可以查看代碼中存在的問題。如下圖所示,錯(cuò)誤報(bào)告中會(huì)提示問題,錯(cuò)誤編號(hào)和所在行數(shù)位置,點(diǎn)擊某一個(gè)具體的問題后編輯器就會(huì)自動(dòng)定位到相應(yīng)的行數(shù)。

把某類文件關(guān)聯(lián)為Python

在有些時(shí)候我們想借助某些語法的高亮特性,但是默認(rèn)文件后綴卻不是編輯能識(shí)別的內(nèi)容。例如,我日常會(huì)用到的一類snakfile為后綴的文件。那么可以做如下設(shè)置

"files.associations": {
        "Snakefile": "python"
    }

禁止對(duì)某些文件進(jìn)行檢查

從上面的截圖可以發(fā)現(xiàn),我一個(gè)文件中竟然有 915 處問題,看來我這個(gè)智商基本就告別 Python 了。如果為了自我麻痹,我可以在設(shè)置中關(guān)閉代碼檢查,但真實(shí)情況是這個(gè)文件并不是一個(gè)真正的 Python 腳本,我只是想借用Python 的語法高亮而已。

針對(duì)這種情況,我們可以選擇單獨(dú)對(duì)某一類(后綴)文件排除語法檢查。比如我用 Python 語法高亮的這類非Python 文件后綴通常我會(huì)被我命名為 snakefile ,那就可以進(jìn)行如下設(shè)置:

"python.linting.ignorePatterns": [
        ".vscode/*.py",
        "**/site-packages/**/*.py",
        "*.snakefile"
    ]

重啟之后,在打開原文件,滿屏的大波浪紅線就無影無蹤了。

注意,如果想讓上面配置生效,需要確保"python.jediEnabled": ture

當(dāng)然,因?yàn)?VS Code 對(duì) Python 的完善支持,在設(shè)置中還有非常多的相關(guān)參數(shù)可以調(diào)整,你可以在設(shè)置的搜索框中輸入python 瀏覽一下,但因?yàn)槲覀儽疚念A(yù)設(shè)是輕度編寫代碼就不在展開了。

另外,也可以參考官方的一些 Python 使用介紹

windows 用戶的一個(gè)痛點(diǎn)

在文章開始,我說「本文以 PC 作為安裝配置示例,Mac 基本類似且部分內(nèi)容體驗(yàn)可能更優(yōu)」,現(xiàn)在就表達(dá)一下這個(gè)小小的遺憾。隨著 win10 的升級(jí),Windows 已經(jīng)可以安裝自己的 Ubuntu 系統(tǒng) 「Windows Subsystem for Linux」,但是系統(tǒng)自帶的 bash 那叫一個(gè)丑陋和難用。由于 VS Code 在集成終端上下了不少功夫,其實(shí)我一直都把它當(dāng)成我的簡(jiǎn)潔版「XShell」來使用,體驗(yàn)也非常好。如果你想試試,只需要在配置文件中把terminal.integrated.shell.windows 由默認(rèn)的C:\\Windows\\System32\\cmd.exe 改為C:\\Windows\\System32\\bash.exe,這個(gè)具體內(nèi)容以后再寫。但是如果 在這個(gè) bash 里調(diào)試 Python 是會(huì)出問題的,修改起來即便能姑且使用也是拆了東墻補(bǔ)西墻。我暫時(shí)的解決方法是在預(yù)覽版的 VS Code 中修改了默認(rèn)的 terminal,在穩(wěn)定版里還用 cmd.exe。


VS Code 基礎(chǔ)知識(shí)思維導(dǎo)圖

VS Code 學(xué)習(xí)記:如何快速掌握新編輯器
VS Code 學(xué)習(xí)記:Vs Code 前世今生及設(shè)計(jì)哲學(xué)
VS Code 學(xué)習(xí)記:如何快速上手
VS Code 學(xué)習(xí)記:如何雙手不離開鍵盤

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容