从 WebStorm 转到 VSCode!使用一周体验报告
前言
最近我的 Jetbrains 开源项目授权到期了,想要续订的时候发现 Jetbrains 提高了开源项目申请门槛,我的 StarBlog 项目因为名字里包含 blog 这个词无法申请,虽然我在 github 上有很多开源项目,但年底比较忙,疏于更新,一时间竟然找不到一个满足 jetbrains 要求(近三个月内每月都有commit)的项目…
所以,在我的项目符合申请条件之前,只能先用 VSCode 顶一段时间了。
简介
作为业余炼丹选手,vscode 其实是我每天都会用到的工具,训练、微调模型对 GPU 算力的要求较高,在本地跑是不实际的,我的习惯是使用 vscode 的 remote development 功能,连接到服务器上去直接编辑和调试 python 代码,当然只是作为前期的快速实现和验证,真正项目还是在 PyCharm 里完成的,因此,vscode 对我来说是既熟悉又陌生,经常使用,但不是主力开发工具,在此之前并没有深入研究过。
本文记录我在使用 VSCode 开发前端项目的经历,主要是 Next.js 项目,使用 TypeScript 。
插件方面,跟前端开发有关有以下几个:
- Babel JavaScript
- ESLint
- Live Preview
- Live Server
- open in browser
- Path Intellisense
- React Native Tools
- Tailwind CSS IntelliSense
实际上用得上估计就 Live Server 和最后那个 Tailwind CSS IntelliSense ,其他的插件给我的感知不强,似乎 vscode 本身就对前端开发特别是 TypeScript 提供了不错的支持。
配置
快捷键设置
我用习惯了 jetbrains 的 IDE ,学习的快捷键也是 IDEA 风格的,得益于 vscode 丰富的插件生态,我安装了 IntelliJ IDEA Keybindings 这个插件之后就可以获得与 jetbrains 差不多的快捷键体验了。
配置 Explorer 文件树的缩进
Settings › Workbench › Tree: Indent
原本是 8 ,目录层次看得不是很清楚,我改成 14 ,好多了
| 修改前 | 修改后 |
|---|---|
![]() |
![]() |
其他
其他的就都是很个性化的东西了,我配置了 github 账号,可以看到 PR 、issues 之类的,跟 jetbrains 差不多的体验。
同步功能也很不错,一开始我以为不能禁用主题同步,后面发现要编辑配置文件,添加以下配置即可
"settingsSync.ignoredSettings": [
"workbench.colorTheme"
]
调试
WebStorm 支持的调试功能,vscode 基本都有的,只不过前者是图形界面配置,后者是通过 JSON 文件配置。
点击 vscode 左侧的 Run and Debug 按钮,创建一个 launch.json 文件。
右下角有 Add Configuration... 按钮,有很多模板可以添加,以我现在的这个 Next.js 项目为例,我创建了一个 npm 的配置,然后稍微修改了一下就好了。

适用于 Next.js dev 模式的配置如下
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"command": "yarn dev",
"name": "next dev",
"request": "launch",
"type": "node-terminal",
"env": {
"NEXT_PUBLIC_BASE_URL": "http://localhost:5234"
}
}
]
}
配置好了点一下三角形按钮运行就好了~
PS:打断点啥的应该也没问题,我还没测试。
痛点
路径识别功能较弱
虽然我安装了 Path Intellisense 插件,但很多时候路径还是无法识别到,做不到像 jetbrains 那样开箱即用。
除了在前端项目里面很多地方检测不到路径之后,还有……
比如说编辑 .gitignore 文件的时候,路径不会自动补全;
比如说写 commit message 的时候,文件名不会自动补全;
同个项目内复制代码不会自动 import 依赖
同个项目内,从一个文件复制代码到另一个文件,不会自动 import 这段代码的依赖。
比如这段代码
<div>
<h1 className='text-2xl'>任务列表</h1>
<Breadcrumbs className='mt-3'>
<BreadcrumbItem>主页</BreadcrumbItem>
<BreadcrumbItem>任务列表</BreadcrumbItem>
</Breadcrumbs>
<Spacer y={4} />
</div>
需要引入以下依赖
import { Breadcrumbs, BreadcrumbItem } from "@nextui-org/breadcrumbs";
import { Spacer } from "@nextui-org/spacer";
在 WebStorm 中,复制代码到另一个文件后,会把这段代码的依赖 import 一并添加到新文件的顶部,不过 vscode 默认情况下是没办法的,估计需要使用插件来实现。
补全后处于高亮模式下代码提示失效
比如我要写这样的一个 div
<div className="flex justify-items-center">
</div>
现在 <div></div> 已经有了,我接着打了 clas ,按tab补全为 className="",这很好,光标也自动跑到双引号里面。
但是!为啥双引号里面是高亮的?这时候是不会提示的,要按esc退出这个高亮模式,才能出提示…
这到底是什么鬼啊!!
跟 className 没关系,任何tab出来的都是这样
一补全出来就是高亮纯文本模式
到底是哪个小天才设计的 feature 啊
自动引入的组件默认加上 .jsx 后缀
我在 src\components\page-header.tsx 文件里写了一个组件 PageHeader
然后我在另一个页面里需要使用这个组件,输入 <PageH 自动补全为 <PageHeader,同时提示我要 import 这个组件,一切都OK,也能生成 import 语句
然鹅,它生成的 import 的语句是这样!
import { PageHeader } from "@/components/page-header.jsx";
为啥要加后缀啊??不用加的,而且这后缀也加错了,我这个是 .tsx 文件啊…
导致 next.js 一下就报错了
Module not found: Can't resolve '@/components/page-header.jsx'
【前端带师】建议我把 tsconfig.json 里的 allowJs 关掉,不过我测试了还是一样(摊手.gif)
输入 / 不会自动 close tag
比如我要使用上面的这个组件
<PageHeader
title="任务列表"
breadcrumbs={[
{ title: '主页', href: RouterMap.Index },
{ title: '任务列表' }
]}
/>
一开始,我在 IDE 里输入 <PageH 自动补全为 <PageHeader
这时候再输入 / ,在使用 WebStorm 的时候会自动 close tag,自动生成右边的尖括号:<PageHeader />
但是 vscode 不会,没有任何变化,不知道是不是得做什么配置。
修改 tag 时不会同步修改对应的 close tag
有这样一个 tag
<h1 className={title()}>Blog</h1>
现在我要把 h1 改成 div
在 WebStorm 里修改会同步把后面的 </h1> 改成 </div>
但是 vscode 不会,也许需要额外的配置。
Console Panel 无法 collapse
当我打开下面这个 console panel 的时候,不是占着屏幕的空间吗,当我要写代码的时候,要把它折叠起来,但是没有这个功能,右上角按钮的只能关掉

然后我要重新打开 console 来看的时候,点左下角那个「No problems」的按钮时,出来的是 problems panel ,还得手动去切换到 console ,好麻烦。
经过查找资料,我才知道可以用快捷键去 toggle
按 Alt+F8 是切换 debug console
按 Alt+F12 是切换 Terminal
小结
vscode 使用下来给我的感觉就是轻,虽然说只是编辑器,但加上一堆插件之后也是和 IDE 差不多的体量,但仍然给我一种相比于 jetbrains 系列轻量的感觉,响应也挺快的,不过很多功能和细节方面有点反人类,也许是我用得还不熟悉吧~ 不过想到是开源免费的,还要啥自行车呢……
从 WebStorm 转到 VSCode!使用一周体验报告的更多相关文章
- 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计
20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...
- 《Linux内核分析》第二周学习报告
<Linux内核分析>第二周学习报告 ——操作系统是如何工作的 姓名:王玮怡 学号:20135116 第一节 函数调用堆栈 一.三个法宝 二.深入理解函数调用堆栈 三.参数传递与局部变量 ...
- 《Linux内核分析》第三周学习报告
<Linux内核分析>第三周学习报告 ——构造一个简单的Linux系统MenuOS 姓名:王玮怡 学号:201351 ...
- 201621123018《Java程序设计》第1周学习报告
1.<Java程序设计>第1周学习报告 1.本周学习报告 关键字:Java的发展.Java语言的特点.JDK.JRE.JVE.Java开发工具.Java环境配置.Java是一种面向对象的程 ...
- PASS模型-第一周个人报告
PASS模型-第一周个人报告 博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE2020 作业要求 https://edu.cnblogs.com/campus ...
- VSCode一键接入Notebook体验算法套件快速完成水表读数
摘要:本示例围绕真实AI需求场景,介绍VSCode一键接入Notebook体验算法套件快速完成水表读数的使用流程. 本文分享自华为云社区<VSCode一键接入Notebook体验算法套件快速完成 ...
- 20145304 Java第九周学习报告
20145304<Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是Java联机数据库的标准规范.定义了 ...
- 20145304 Java第八周学习报告
20145304<Java程序设计>第八周学习总结 教材学习内容总结 NIO NIO使用频道来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区容量,在缓冲区中对感兴趣的数据区块进行标记 ...
- 20145304 Java第七周学习报告
20145304<Java程序设计>第七周学习总结 教材学习内容总结 1.时间的度量: 格林威治标准时间(GMT)通过观察太阳而得,其正午是太阳抵达天空最高点之时,因地球的公转与自传,会造 ...
- 20145304 Java第六周学习报告
20145304<Java程序设计>第六周学习总结 教材学习内容总结 1.InputStream与OutputStream: 在Java中,输入串流的代表对象为java.io.InputS ...
随机推荐
- MQTT(EMQX) - Linux CentOS Docker 安装
MQTT(EMQX) - Linux CentOS 直接安装 和 Docker 安装 常规安装 下载文件 版本选择:https://www.emqx.com/zh/downloads/broker/ ...
- 收到邮件了,微软新必应(New Bing)可以用了,只隔了一天
收到邮件了,微软新必应(New Bing)可以用了,只隔了一天 国内申请微软新必应(New Bing) 1号我写了一篇文章,介绍内置ChatGPT的微软新必应(New Bing)申请方法,没想到昨天就 ...
- MIGO BAPI_GOODSMVT_CREATE创建及增强
1.MIGO过账BAPI新增字段 BAPI新增收货行号字段,保存外围系统的数据 1.1.MATDOC表新增收货行号 1.2.MSEG表新增收货行号 创建DDL视图用于扩展NSDM_E_MSEG 1.3 ...
- Java 时间戳和时间相互转换 日期时间和字符串相互转换 日期时间相减差值 日期时间增加指定天数
Java 时间戳和时间相互转换 日期时间和字符串相互转换 日期时间相减差值 日期时间增加指定天数 代码: package com.sux.demo; import java.text.ParseExc ...
- JSP开发模式(四种模式)
原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 学习编程开发少不了学习开发模式, JSP在创立至今有 \(4\) 种流行的开发模式: 包括 JS ...
- qsort函数使用方法总结(详细全面+代码)
目录 qsort函数原型 compar参数 int 数组排序 结构体排序 字符串指针数组排序 字符串二维数组排序 整型二维数组(力扣题目) qsort函数原型 void qsort( void *ba ...
- UNI-APP 使用Echart
UNI-APP 使用Echart(含地图教程) https://blog.csdn.net/weixin_43548442/article/details/121468189 uniapp使用echa ...
- vmware超融合基础安装与配置
目录 vmware超融合 安装配置ESXI 安装VMware vCenter Server 安装vCenter插件 安装vCenter 使用VMware Vsphere Client登录Vcenter ...
- Spring AOP原来是这样实现的
Spring AOP 技术实现原理 在Spring框架中,AOP(面向切面编程)是通过代理模式和反射机制来实现的.本文将详细介绍Spring AOP的技术实现原理,包括JDK动态代理和CGLIB代理的 ...
- 基于html+jquery开发的科学计算器(课程作业)
基于html和jquery开发的科学计算器,该科学计算器可进行乘方.开方.指数.对数.三角函数.统计等方面的运算,又称函数计算器. 科学型带有所有普通的函数,所有的函数都分布在键盘上以致于你可以不用通 ...

