VS Code无法实现“转到定义“?

导读:VS Code一度个人日常工作中必不可少的IDE之一,在前文中也提到,它和Jupyterlab+Pycharm构成了个人工作日常IDE​组合。然而,近日在新电脑中搭建Python环境中,发现VS Code的一个重要功能——"转到定义"无法使用,这俨然使VS Code的威力大打折扣,毕竟个人主要是使用其来查看第三方库源码,通过该功能可以方便的查找引用和定义。本文针对此问题进行完整的​问题复现和解决。
在这里插入图片描述

01 问题描述

新环境下新安装VS Code,已安装python插件,在Python代码文件中右键点击类或函数名,无转到代码定义选项(正常情况下,右键菜单中有该选项,可通过快捷键F12或ctrl+鼠标左键转到其定义源文件位置)。

已安装插件列表
右键类名,无“转到定义”选项

无法跳转到定义,那么要VS Code还有何用?

为此,自然是在百度上搜索了一番,发现该问题已有很多人踩坑:

网友踩坑解决方案1
网友踩坑解决方案2
网友踩坑解决方案3
发现遇到该问题的不止我一人,我就放心了……

然而,逐一试验了上述方法,要么是无法完成指定流程,要么是无法解决问题。但从中,仍能细心的发现大家把解决这一问题的思路聚焦于Jedi上​。那么Jedi​是啥呢?

02 详解python.languageServer

经过一番查阅资料,了解到这样一组介绍:

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的语言服务器选用Jedi​。那么python的语言服务器又是指代的什么呢?除了Jedi还有哪些可选呢?经过了解,除了Jedi之外,该设置还有Microsoft、None以及Pylance等选项​。

所以打开settings.json设置文件,打开方法为在VS Code中键入ctrl+shift+P全局快捷键,打开命令搜索窗,输入settings.json​即可打开首选项。
在这里插入图片描述

打开发现该设置文件中并无此项(推断可能是设置为None),所以直接导致无法实现"转到定义"​功能​。于是,在json文件中手动加入上述配置代码​:

"python.languageServer": "Jedi"

保存后,VS Code提示reload,而后​再重新回到python源文件中,那个熟悉的带有F12功能的右键菜单回来​了。

在这里插入图片描述

经过尝试,发现将python语言服务器分别设置为Microsoft和None时,均存在该问题,即没有转到定义选项,而设置Jedi时则​功能正常。

03 更好的选择——Pylance

就在我反复测试之余,不仅解决了问题还能举一反三,这时VS Code​居然给我这样的提示:

在这里插入图片描述

即建议尝试一个基于Microsoft的速度更快、功能更为丰富的python语言服务器​——Pylance。ok,​那就Try it now。很快完成了插件安装,并再次reload,奇迹出现:不仅支持F12功能,还讲源码中的包名和类名的关键字进行颜色区分显示,真的是实力与颜值俱在​!
在这里插入图片描述

当然,此时已自动将settings.json中python语言服务器设置为Pylance:

"python.languageServer": "Pylance"

详细查看该插件,看到介绍中介绍了其主要特性,而后,在里面尝试敲了几句代码,发现在Pylance插件的作用下,VS Code竟变得如丝般顺滑​!微软诚不可欺我,果真是一款良心插件。

搜索了这款插件的风评,居然一致认为是微软Python团队的良心插件,发布于2020年6月,只是自己未曾了解而已。赞!

04 小结

  • VS Code中转到定义功能,核心是受settings.json中的python.languageServer参数控制,该参数合法取值有Jedi、Microsoft和None,安装Pylance插件后还支持Pylance​。当设置为Microsoft和None时,无法实现转到定义,而设置Jedi和Pylance时可以​。

  • VS Code中搭建Python环境,建议安装两个插件:即Python+Pylance,其中前者是VS Code支持Python编译的前提,后者是基于Python的扩展,支持自动补全、参数提示、转到定义等多项功能改进。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以教你使用VS Code工具,使用Vue实现一个简单的四则运算。 首先,你需要安装Node.js和Vue CLI。在安装好之后,打开命令行工具,输入以下命令来创建一个新的Vue项目: ``` vue create calculator ``` 接着,进入项目目录,运行以下命令来安装Vue Router和Axios: ``` cd calculator npm install vue-router axios ``` 现在,我们需要在Vue项目中创建一个组件来实现四则运算。在src/components目录下创建一个名为Calculator.vue的文件,并在其中添加以下代码: ```html <template> <div> <input v-model="expression" placeholder="请输入算式"> <button @click="calculate">计算</button> <p v-if="result !== null">结果为 {{result}}</p> </div> </template> <script> export default { data() { return { expression: '', result: null } }, methods: { calculate() { try { this.result = eval(this.expression) } catch (e) { this.result = null } } } } </script> ``` 在上面的代码中,我们定义了一个名为Calculator的Vue组件,其中包含一个输入框、一个按钮和一个用于显示结果的段落。我们使用了v-model指令来实现双向数据绑定,使用了@click指令来监听按钮点击事件,并使用了v-if指令来控制结果段落的显示。 接着,我们需要在src/router目录下创建一个名为index.js的文件,并在其中添加以下代码: ```javascript import Vue from 'vue' import Router from 'vue-router' import Calculator from '@/components/Calculator' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'Calculator', component: Calculator } ] }) ``` 在上面的代码中,我们定义了一个名为Calculator的路由,并将其指向了我们刚刚创建的Calculator组件。 最后,在src/main.js文件中,我们需要引入Vue Router和创建一个Vue实例。在该文件中添加以下代码: ```javascript import Vue from 'vue' import App from './App.vue' import router from './router' Vue.config.productionTip = false new Vue({ router, render: h => h(App), }).$mount('#app') ``` 在上面的代码中,我们引入了Vue Router,并将其添加到了Vue实例中。我们还将Vue实例挂载到了id为app的DOM元素上。 现在,你可以在命令行中运行以下命令来启动Vue项目: ``` npm run serve ``` 然后,在浏览器中打开http://localhost:8080,你就可以看到一个包含一个输入框和一个按钮的页面了。你可以在输入框中输入算式,并点击按钮,就可以得到计算结果了。 希望这个例子能够帮助你了解如何使用VS Code工具和Vue实现四则运算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值