跳到文章

Be productive with Visual Studio Code

本文由 vilicvane 过目并提供修改意见

曾经有一位 Code Ninja 教导我,“在软件工程领域中,厉害的人都有一款用得很溜的 IDE/Editor”。虽说不完全同意,毕竟比起写代码,思想更重要,但熟练掌握一款编辑器确实能大幅提高软件工程师的工作效率。

我用的最多的 Editor 是 Visual Studio Code, 其次是 Intellij Idea, 最后是 Vim. 根据场景,我会使用不同编辑器。

场景 Editor
JVM 上的语言, PHP Intellij Idea
服务端代码的小修改,配置文件的修改 Vim
其它所有场景 VSCode

本文主要关注如何使用 VSCode 提高编码效率,最后会说一下和 Intellij Idea 的对比。不会具体到语言,即如何使用 VSCode 编写和调试 XXX 语言不在本文的讨论范围之内,更多的关注在 VSCode 本身上。希望看过本文的同学们,多多实践。

Basic

Being able to keep your hands on the keyboard when writing code is crucial for high productivity. — VSCode Doc

当我在谈生产力的时候我一般在谈快捷键。道理大家都懂,但这个过程历来很痛苦。比如在学习 Vim 快捷键的时候,有的人会在命令行中 vimtutor 把整个 Vim 的基础教程过一遍;有的人会去搜索引擎里查询;有的人会把别人的博客提到的 Vim 快捷键摘录下来。每一次都能记住一些快捷键,但许久不用,就又忘记了,又要查资料、看教程。很多软件都是如此,都是 查快捷键->记忆快捷键->用快捷键->忘记快捷键->查快捷键 的循环,难受。

Atom(Github 出品的现代编辑器) 改变了这一切,Atom 提供了 Command Palette 功能

![](/images/Be productive with Visual Studio Code/Atom Command Palette.png)

只要 Ctrl Shift P (Linux/Windows) 或者 Cmd Shift P (macOS) 打开 Command Palette, 告诉 Atom 你想做的事情,Atom 会自动帮你选出一些待选项,并且时刻提醒你,它们的快捷键是什么。使用 Command Palette ,即使你不熟悉快捷键,你也可以只用键盘来完成大部分工作,每一次,Atom 都会悄悄提醒一下快捷键,慢慢地,你自然而然地学会了这个快捷键。即使忘记了,Command Palette 时刻都能帮你找回来,你的手不需要离开键盘。很人性化,很高效,很让人开心!

这个功能很棒,于是 VSCode 也照搬了过来。

![](/images/Be productive with Visual Studio Code/Go Back.gif)

比如我不知道 后退 的快捷键是什么,只要 Ctrl Shift P, 然后输入 Back, VSCode 就会让我选择 Go Back 。哦,原来 Linux 上 后退 的快捷键是 Ctrl Alt - (Windows 下是 Alt Left,不同平台不一样),我记下了。

Command Palette 让我彻底喜欢上 VSCode 和 Atom 这类 Modern Editor, 以至于所有项目都尽可能用 VSCode 写。

接下来会介绍一些 VSCode 上好用的快捷键。由于 Linux/Windows 和 macOS 的快捷键不一样,用户也可能会更改自己的快捷键,所以我会用 命令名称 来介绍,遇到喜欢的快捷键,就在 Command Palette 中试一试吧。

Editing Hack

Common

在不同的软件,甚至不同的操作系统中,有一些快捷键是共用的。但这些通用的快捷键不是 VSCode 的专属命令,所以还是得罪一下你们,全部用快捷键组合。

![](/images/Be productive with Visual Studio Code/Arrow+Shift.gif)

方向键可以上下左右移动光标就不多说了,配合上 Shift 则可以在移动光标的同时选择字符.

![](/images/Be productive with Visual Studio Code/Ctrl+Arrow+Shift.gif)

方向键搭配上 Ctrl 可以按 word 来移动光标,也可以配合 Shift 来选择 word.

![](/images/Be productive with Visual Studio Code/Pg Arrow+Shift.gif)

Home 键可以将光标移到行首,End 键可以将光标移动行尾,Page Up 可以向上翻页,Page Down 可以向下翻页。它们都可以配合 Shift 来进行选中。

![](/images/Be productive with Visual Studio Code/Ctrl+Pg Arrow+Shift.gif)

按住 Ctrl,再按 Home 键可以将光标移到文件头,End 键可以移到文件尾,Page Up 可以顺序切换到前一个 tab,Page Down 可以顺序切换到下一个 tab. Ctrl, Home, End, Shift 可以搭配起来用。

以上的快捷键在 Linux(桌面为 Gnome)和 Windows 上都是通用的,macOS 我想不起来了,应该差不多的。这些快捷键也可以在 Intellij Idea, Firefox, Chrome, Edge, Terminal 等许多软件中使用。 Firefox(自带) 和 Chrome(装插件)建议开启光标浏览。

![](/images/Be productive with Visual Studio Code/Firefox.gif)

VSCode Favored

这一节介绍的是 VSCode 提倡的快捷键。

![](/images/Be productive with Visual Studio Code/Editing Selection.gif)

  • Add Selection To Next Find Match 会选中下一个相同的字符串,在拼写错误等需要同时编辑一个字符串的时候很好用。

  • Add Cursor AboveAdd Cursor Below 适合同时编辑多行。Esc 可以退出多行编辑的状态,Soft undo 可以 undo 上一次选择。

  • Move Line UpMove Line Down 可以上下移动当前(选中)的代码行

它们配合之前 Common 中的 Ctrl, Shift, 方向键等可以玩出花来。

![](/images/Be productive with Visual Studio Code/Editing.gif)

  • Toggle Line Comment 切换行注释
  • Delete Line 删除行
  • FoldUnfold 可以切换 Code Block 的折叠状态
  • Indent Line 可以向内缩进代码,Outdent 可以向外缩进代码
  • Go to Bracket 可以将光标移动到对应的括号

![](/images/Be productive with Visual Studio Code/Ctrl+P.gif)

  • Ctrl P 可以在最近的文件中切换, Ctrl Tab 也可以
  • Ctrl P 然后再 @ 可以查看当前代码文件的 Symbol 结构, 加个 : 可以将 Symbol 分组

![](/images/Be productive with Visual Studio Code/Refactor.gif)

  • Quick Fix 可以快速重构你的代码,只是没有 Intellij Idea 的 Alt Enter 那么强而已
  • Rename Symbol 可以重命名

以上是我编辑代码时常用的快捷键,剩下的其它快捷键可以尽情在 Command Palette 中探索。

Mastering Keyboard Shortcuts

除了编辑代码的快捷键,VSCode 还有一些其它提高生产力的快捷键。

Debugging

![](/images/Be productive with Visual Studio Code/Debugging and Resize Panel.gif)

  • Toggle Breakpoint 设置断点
  • Start Debugging 开始调试
  • Step Into 跳进
  • Step Out 跳出
  • View: Show Debug 聚焦到调试 Sidebar, 多次按 Tab 键可以聚焦到变量列表,Sidebar 里的内容都可以通过 Tab 来切换聚焦
  • View: Increase Current View Size 增大当前 panel(调试 Sidebar), View: Decrease Current View Size 减小当前 panel(调试 Sidebar)
  • Debug: Restart 重新开始调试
  • Debug: Continue 恢复

Code Navigation

![](/images/Be productive with Visual Studio Code/Code Navigation.gif)

  • Go to Definition 定位到 Symbol 定义的位置
  • Peek Definition 速览 Symbol 的定义,Esc 可以关闭速览窗口
  • Find All References 找到所有对 Symbol 的引用,可以使用方向键浏览结果,Enter 键跳转到结果,Esc 关闭查找引用的窗口

![](/images/Be productive with Visual Studio Code/Sidebar.gif)

  • View: Show Explorer 打开文件资源管理器 Sidebar,可以通过方向键浏览文件树。File: New File 可以创建新文件
  • Search: Find in Files 打开搜索 Sidebar,速度超快。多次按 Tab 键可以聚焦到搜索结果,Sidebar 里的内容都可以通过 Tab 来切换聚焦
  • View: Show SCM 打开源代码管理器 Sidebar
  • View: Show Debug 打开调试 Sidebar
  • View: Show Extensions 打开扩展 Sidebar
  • View: Focus First Editor Group 重新回到编辑文件的状态
  • View: Toggle Sidebar Visibility 是否显示 Sidebar

Others

  • View: Toggle Integrated Terminal 在终端和编辑窗口切换
  • File: Open Recent.. 打开最近的项目,Enter 在当前窗口打开,Ctrl Enter 在新窗口打开
  • Gitlens: Compare Commit With Previous 对比修改的代码(需安装 Gitlens 插件)
  • Preferences: Open User Settings 打开用户设置 settings.json
  • Preferences: Open Keyboard Shortcuts 打开键盘快捷键设置
  • Notifications: Clear All Notifications 清除消息通知

Personalization Makes You Different

Themes

![](/images/Be productive with Visual Studio Code/Theme.gif)

以上是 VSCode 中选择主题以及安装新主题的过程,猜猜用了多少快捷键?(注:主题也是一个扩展)

Command Palette 里选择 Preferences: Color Theme -> 方向键上下浏览主题 -> Page Down 快速翻到最底下的 Install Additional Themes -> Command Palette 里选择 View: Show Extensions 聚焦在扩展 Sidebar -> Tab 聚焦在扩展列表 -> Enter 预览主题 -> Tab 聚焦在扩展的 Install 选项,Enter 确认安装 -> Tab 聚焦在扩展的 Reload 选项,Enter 确认重启

我尝试了很多主题,但由于个人原因,最后还是选择了默认主题,其它主题看起来眼睛会难受,默认的最舒服,即使不好看。只能推荐安装这个 Material Icon Theme 这个图标集合。

![](/images/Be productive with Visual Studio Code/Material Icon Theme.png)

Font

我推荐 Fira Code,因为它支持 Font Ligatures(连写字符) 特性。

![](/images/Be productive with Visual Studio Code/Font Ligatures.png)

可以看出图中的 =>, ===, &&, >=, !== 都已经连写了。连写更符合人眼的阅读习惯,原先的2个或3个字符变成了一个,减轻了人眼扫描的压力;但连写不符合人的键盘输入习惯,需要适应一段时间;连写也不适合展示代码,新手会不适应;连写只适合自己爽。

Fira Code 字体安装请参考官方 wiki

安装好之后,在 Command Palette 里选择 Preferences: Open User Settings 打开设置 settings.json, 加上以下配置

"editor.fontFamily": "Fira Code",
"editor.fontLigatures": true,

Fira Code 也支持 Intellij Idea, Visual Studio 等其它编辑器,感兴趣的话不妨去 wiki 看看。

Custom Settings

Preferences: Open User Settings 打开设置 settings.json, 建议配置以下选项

// 自动保存
"files.autoSave": "afterDelay",
// 自动格式化
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
// 用空格不用 Tab(手动斜眼
"editor.insertSpaces": true,
// 渲染空格
"editor.renderWhitespace": "all",

Extensions Make You Coding Life Easy and Cool

推荐3个扩展

  • Gitlens
  • Settings Sync
  • Wakatime

Gitlens 可以大幅增强 VSCode 上的 Git 使用体验。直接安装试试吧

Wakatime 可以统计你的编码时间分布(我是名副其实的 Markdown 程序员)

![](/images/Be productive with Visual Studio Code/Wakatime.png)

Settings Sync 可以同步你的扩展、设置、主题、快捷键、代码片段,可以说是日常编码必备扩展了,显著提升多平台的使用体验。

Tricks Make You Proud of VSCode

在此介绍一些 VSCode 的使用小技巧

Zen Mode

![](/images/Be productive with Visual Studio Code/Zen Mode.gif)

隆重推出 Zen 模式!排除干扰,忘记时间,一心写代码。View: Toggle Zen Mode ,快捷键是先按 ctrl k 再按 z

File Diff

有了 Git,我们可以方便地查看每一个文件和之前 Commit 的 Diff. 但有的时候,我们希望看两个文件的 diff, 这时候 Git 就帮不上忙了。假设有两份日志文件 a.logb.log,为了对比它们之间的差异,有以下选项

![](/images/Be productive with Visual Studio Code/File Diff.gif)

VSCode 有个强大的命令行,可以通过 code -d a.log b.log 来开启 Diff 窗口

既然 VSCode 能够搞定,那就钦定 VSCode 了,除非是在服务端等没有图形界面环境的时候可以用 GNU Diff

Markdown Editor

![](/images/Be productive with Visual Studio Code/Markdown.gif)

在 Zen Mode 下当一个 Markdown 程序员挺开心的!不需要其它软件了

  • Markdown: Open Preview to the Side 在旁边同时打开一个 Markdown 预览窗口(Editor Group)
  • 聚焦第一个窗口的命令是 View: Focus First Editor Group ,它的快捷键是 ctrl 1,那么我们猜想一下,ctrl 2 可以聚焦第二个窗口(预览窗口),事实证明我们是正确的。快捷键应该有一套设计理念,符合人的直觉,这是好的快捷键设计。

Snippets

![](/images/Be productive with Visual Studio Code/Snippets.gif)

可以预先定义一些常用的代码片段,方便以后快速生成模板代码

Preferences: Configure User Snippets 编辑代码片段。日后就可以快速输入模板代码了。

其实很多语言插件会自带很多代码片段,所以大部分情况下不需要自己自定义,关于代码片段语法参考 Creating your own snippets

Add Files to VSCode Project

我在写这篇博客的时候,截了很多 Gif 图,默认存储在 ~/Videos 文件夹。但现在 VSCode 很难添加编辑器之外的文件,在 Files 里复制文件,然后在 VSCode 里粘贴是不可行的,VSCode 目前只支持在多个 VSCode 实例之间以及单个实例内部复制粘贴。

![](/images/Be productive with Visual Studio Code/Drag and Drop.gif)

一种可行的方案是通过拖拽复制文件,但前提是 Files 和 VSCode 都在前台(Foreground),这就需要先调整窗口大小,然后才能用鼠标拖拽,别提多难受了。

我目前是用命令行来做 Work around, 每次截取了新的 Gif,就通过命令行移动到指定目录。如果有更好的方法,欢迎提供。

mv ~/Videos/*.gif ~/code/github/studymakesmehappy.club/static/images/Be\ productive\ with\ Visual\ Studio\ Code

Comparing With Jetbrains Family Products

Feature VSCode Jetbrains Family Products Description
License ✯✯✯✯✯ ✯✯✯✰✰ VSCode 基于 MIT 协议开源,Jetbrains 部分收费,部分基于 Apache 2.0 开源
资源占用 ✯✯✯✯✰ ✯✯✰✰✰ Jetbrains 在 CPU, Memory 和 Disk 上的占用都显著高于 VSCode
智能提示 ✯✯✯✯✰ ✯✯✯✯✯ Jetbrains 家的 Intellisense 地表最强
重构支持 ✯✯✯✰✰ ✯✯✯✯✯ Jetbrains 家的 Refactoring 地表最强
插件支持 ✯✯✯✯✯ ✯✯✯✯✰ VSCode 的插件使用 JS/TS 写的,方便开发,插件多,更新快,质量也不错。Jetbrains 家的插件不多,而且更新比较慢。
语言框架支持 ✯✯✯✯✯ ✯✯✯✯✯ VSCode 对新语言的支持基于 Language Server,为 VSCode 开发的语言插件,可以很方便地移植到其他平台上去; Jetbrains 的插件是基于 Intellij Platform 用 JVM 语言写的。Idea 装个 Android 插件就是 Android Studio, 装个 Python 插件就是 PyCharm, 装个 PHP 插件就是 PhPStorm. 两种不同的理念,VSCode 开放很多; Jetbrains 就有点 Evil 了,把一个个插件分出新的 SKU 来卖…
快捷键 ✯✯✯✯✯ ✯✯✯✰✰ 没有 Command Palette 的都是反人类,而且 VSCode 的快捷键自定义友好程度大幅领先 Jetbrains
Version control ✯✯✯✯✯ ✯✯✯✯✰ 配上 Gitlens 的 VSCode 进行源代码管理很方便
Integrated Terminal ✯✯✯✯✯ ✯✯✯✰✰ VSCode 内置的 terminal 支持 Tabs 和 Split,有朝一日可以替代掉一众 Terminal Emulator
Decompiler ✯✯✯✰✰ ✯✯✯✯✯ Jetbrains 可以很方便地查看类库的源码
测试 ✯✯✯✰✰ ✯✯✯✯✯ 目前 VScode 对 Test Runner 的支持还不够好,Jetbrains 完美
命令行工具 ✯✯✯✯✯ ✯✰✰✰✰ VSCode 的命令行工具 code 很友好, 支持 file diff, trouble shooting 等; Intellij Idea 的命令行工具 idea 只能用户启动 idea, 相当于没有
工作区及项目配置 ✯✯✯✯✯ ✯✯✯✰✰ VSCode 的配置基于 JSON(非标准),简单易读,完全可以只使用键盘来配置; Jetbrains 的配置基于 XML,基本只能通过 UI 界面来配置(比如配置 JDK),不可避免要用到鼠标,很难自动化,效率很低,而且令人困惑

由于 VSCode 简单、轻便、快捷键友好,所以我一般会在 VSCode 写代码;由于 Intellij Idea 的代码分析和重构很强,我会用它来大面积重构,也会用它来查看一些类库(JDK)的源码

Conclusion

快捷键即生产力,VSCode 提供了一个很优雅的快捷键学习的解决方案。我们只需记住一些 Universal 的快捷键,以及伟大的 Command Palette 😀。剩下的就边用边学吧。

在写这篇文章时,我也没有 100% 完全地用这些快捷键来工作,有时候还是抵御不了鼠标的诱惑。但自从我下意识要完全用快捷键工作时,效率提高了很多,完全只用快捷键工作只是时间问题罢了。相信你们也可以的😁

Reference