VS Code无法实现"转到定义"?
导读
VS Code一度个人日常工作中必不可少的IDE之一,在前文中也提到,它和Jupyterlab+Pycharm构成了个人工作日常IDE组合。然而,近日在新电脑中搭建Python环境中,发现VS Code的一个重要功能——"转到定义"无法使用,这俨然使VS Code的威力大打折扣,毕竟个人主要是使用其来查看第三方库源码,通过该功能可以方便的查找引用和定义。本文针对此问题进行完整的问题复现和分析解决。
已安装插件列表
右键类名,无“转到定义”选项
网友踩坑解决方案1
网友踩坑解决方案2
网友踩坑3——未解决
发现遇到该问题的不止我一人,我就放心了……
然而,逐一试验了上述方法,要么是无法完成指定流程,要么是无法解决问题。但从中,仍能细心的发现大家把解决这一问题的思路聚焦于Jedi上。那么Jedi是啥呢?
经过一番查阅资料,了解到这样一组介绍:
Jedi 是一个可以在 IDEs 或者编辑器中使用的 Python 代码自动补齐和静态分析工具。它的历史重点是自动完成,但现在也进行静态分析。Jedi 好用并且快速, 可以搜索相关的名称并列出 Python 文件中的所有名称并推断它们。Jedi 理解 docstrings,你也可以在你的 REPL 中使用 Jedi 自动补齐完成。
虽然这段话一看就是机器翻译的英语介绍,但仍能从中get到Jedi的主体功能:代码自动补全+名称关联和推断。具体到VS Code中,Jedi是如果产生作用的呢?这就不得不从VS Code安装Python插件后的一组设置说起。正常情况下,VS Code中完成Python插件安装后,会自动在settings.json中增加这样一条设置:
"python.languageServer": "Jedi"
"python.languageServer": "Jedi"
经过尝试,发现将python语言服务器分别设置为Microsoft和None时,均存在该问题,即没有转到定义选项,而设置Jedi时则功能正常。
当然,此时已自动将settings.json中python语言服务器设置为Pylance:
"python.languageServer": "Pylance"
详细查看该插件,看到介绍中介绍了其主要特性,而后,在里面尝试敲了几句代码,发现在Pylance插件的作用下,VS Code竟变得如丝般顺滑!微软诚不可欺我,果真是一款良心插件。
搜索了这款插件的风评,居然一致认为是微软Python团队的良心插件,发布于2020年6月,只是自己未曾了解而已。赞!
VS Code中转到定义功能,核心是受settings.json中的python.languageServer参数控制,该参数合法取值有Jedi、Microsoft和None,安装Pylance插件后还支持Pylance。当设置为Microsoft和None时,无法实现转到定义,而设置Jedi和Pylance时可以。
VS Code中搭建Python环境,建议安装两个插件:即Python+Pylance,其中前者是VS Code支持Python编译的前提,后者是基于Python的扩展,支持自动补全、参数提示、转到定义等多项功能改进。
请获奖者尽快通过公众号菜单->关于添加小编微信,联系送书事宜
相关阅读: