<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          VS Code無法實(shí)現(xiàn)"轉(zhuǎn)到定義"?

          共 2323字,需瀏覽 5分鐘

           ·

          2021-01-17 07:40


          導(dǎo)讀

          VS Code一度個人日常工作中必不可少的IDE之一,在前文中也提到,它和Jupyterlab+Pycharm構(gòu)成了個人工作日常IDE組合。然而,近日在新電腦中搭建Python環(huán)境中,發(fā)現(xiàn)VS Code的一個重要功能——"轉(zhuǎn)到定義"無法使用,這儼然使VS Code的威力大打折扣,畢竟個人主要是使用其來查看第三方庫源碼,通過該功能可以方便的查找引用和定義。本文針對此問題進(jìn)行完整的問題復(fù)現(xiàn)和分析解決。



          01 問題描述
          新環(huán)境下新安裝VS Code,已安裝python插件,在Python代碼文件中右鍵點(diǎn)擊類或函數(shù)名,無轉(zhuǎn)到代碼定義選項(正常情況下,右鍵菜單中有該選項,可通過快捷鍵F12或ctrl+鼠標(biāo)左鍵轉(zhuǎn)到其定義源文件位置)。

          已安裝插件列表


          右鍵類名,無“轉(zhuǎn)到定義”選項


          無法跳轉(zhuǎn)到定義,那么要VS Code還有何用?為此,自然是在百度上搜索了一番,發(fā)現(xiàn)該問題已有很多人踩坑

          網(wǎng)友踩坑解決方案1

          網(wǎng)友踩坑解決方案2

          網(wǎng)友踩坑3——未解決


          發(fā)現(xiàn)遇到該問題的不止我一人,我就放心了……


          然而,逐一試驗(yàn)了上述方法,要么是無法完成指定流程,要么是無法解決問題。但從中,仍能細(xì)心的發(fā)現(xiàn)大家把解決這一問題的思路聚焦于Jedi上。那么Jedi是啥呢?



          02 詳解python.languageServer

          經(jīng)過一番查閱資料,了解到這樣一組介紹:

          Jedi?是一個可以在?IDEs?或者編輯器中使用的?Python 代碼自動補(bǔ)齊和靜態(tài)分析工具。它的歷史重點(diǎn)是自動完成,但現(xiàn)在也進(jìn)行靜態(tài)分析。Jedi 好用并且快速,?可以搜索相關(guān)的名稱并列出 Python 文件中的所有名稱并推斷它們。Jedi 理解 docstrings,你也可以在你的 REPL 中使用 Jedi 自動補(bǔ)齊完成。


          雖然這段話一看就是機(jī)器翻譯的英語介紹,但仍能從中g(shù)et到Jedi的主體功能:代碼自動補(bǔ)全+名稱關(guān)聯(lián)和推斷。具體到VS Code中,Jedi是如果產(chǎn)生作用的呢?這就不得不從VS Code安裝Python插件后的一組設(shè)置說起。正常情況下,VS Code中完成Python插件安裝后,會自動在settings.json中增加這樣一條設(shè)置:

          "python.languageServer": "Jedi"
          表示python的語言服務(wù)器選用Jedi。那么python的語言服務(wù)器又是指代的什么呢?除了Jedi還有哪些可選呢?經(jīng)過了解,除了Jedi之外,該設(shè)置還有Microsoft、None以及Pylance等選項。

          所以打開settings.json設(shè)置文件,打開方法為在VS Code中鍵入ctrl+shift+P全局快捷鍵,打開命令搜索窗,輸入settings.json即可打開首選項。


          打開發(fā)現(xiàn)該設(shè)置文件中并無此項(推斷可能是設(shè)置為None),所以直接導(dǎo)致無法實(shí)現(xiàn)"轉(zhuǎn)到定義"功能。于是,在json文件中手動加入上述配置代碼:
          ????"python.languageServer":?"Jedi"


          保存后,VS Code提示reload,而后再重新回到python源文件中,那個熟悉的帶有F12功能的右鍵菜單回來了。


          經(jīng)過嘗試,發(fā)現(xiàn)將python語言服務(wù)器分別設(shè)置為Microsoft和None時,均存在該問題,即沒有轉(zhuǎn)到定義選項,而設(shè)置Jedi時則功能正常。



          03 更好的選擇——Pylance
          就在我反復(fù)測試之余,不僅解決了問題還能舉一反三,這時VS Code居然給我這樣的提示:


          即建議嘗試一個基于Microsoft的速度更快、功能更為豐富的python語言服務(wù)器——Pylance。ok,那就Try it now。很快完成了插件安裝,并再次reload,奇跡出現(xiàn):不僅支持F12功能,還講源碼中的包名和類名的關(guān)鍵字進(jìn)行顏色區(qū)分顯示,真的是實(shí)力與顏值俱在!


          當(dāng)然,此時已自動將settings.json中python語言服務(wù)器設(shè)置為Pylance:

          "python.languageServer": "Pylance"


          詳細(xì)查看該插件,看到介紹中介紹了其主要特性,而后,在里面嘗試敲了幾句代碼,發(fā)現(xiàn)在Pylance插件的作用下,VS Code變得如絲般順滑微軟誠不可欺我,果真是一款良心插件。

          搜索了這款插件的風(fēng)評,居然一致認(rèn)為是微軟Python團(tuán)隊的良心插件,發(fā)布于2020年6月,只是自己未曾了解而已。贊!



          04 小結(jié)
          • VS Code中轉(zhuǎn)到定義功能,核心是受settings.json中的python.languageServer參數(shù)控制,該參數(shù)合法取值有Jedi、Microsoft和None,安裝Pylance插件后還支持Pylance。當(dāng)設(shè)置為Microsoft和None時,無法實(shí)現(xiàn)轉(zhuǎn)到定義,而設(shè)置Jedi和Pylance時可以。

          • VS Code中搭建Python環(huán)境,建議安裝兩個插件:即Python+Pylance,其中前者是VS Code支持Python編譯的前提,后者是基于Python的擴(kuò)展,支持自動補(bǔ)全、參數(shù)提示、轉(zhuǎn)到定義等多項功能改進(jìn)。


          請獲獎?wù)弑M快通過公眾號菜單->關(guān)于添加小編微信,聯(lián)系送書事宜


          相關(guān)閱讀:




          瀏覽 207
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久午夜无码鲁丝 | 成人精品操BB视频 | 欧美成人性爱在线播放 | 日韩A片视频免费看 | 男人的天堂亚洲TV |