Featured image of post 给VIMer的VSCode笔记

给VIMer的VSCode笔记

作为一个多年的VIMer,在VSCode出来前,我义无反顾的徜徉在vim的海洋中,然而不小心试过部分VSCode的功能后,也是颇为口水加赞叹。那么作为一个已经经历过陡峭的编辑器学习曲线的人,如何更好的用好VSCode呢?本文希望探索和总结一下。
PS:本文快捷键是MacOS版本下的按键,如果你是Windows也不必慌,可自行查找对应按键。

前言

虽然Vim在现有很多版本可以开箱即用了,比如之前我在基于Neovim的下一代IDE提到过,它避免了大量的配置,上手也比较快,但相比于VSCode在易用性上还是有所不如。个人觉得VSCode的插件系统+扩展商店是神级支柱,一个让其更稳定,一个让其更丰富。本文会假定你有一些vim的经验,也折腾过VSCode,我们看在这种情况下,如何更好地用VSCode。看完或许对你的知识有查漏补缺的作用:)

终端Code命令

安装好vscode后,如果你终端还没有code命令,可以按F1然后输入code,找到在PATH中安装Code命令。 它的最常见用法是code .自不必说。还有如下命令可以稍作了解:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# -r 复用窗口打开目录或文件
code -r .

# -g 指定文件名及行号。像vim吧? 
code -g package.json:128

# -d 比较两个文件的内容
code -d a.txt b.txt

# 从标准输出从读取输入, 一如其它可通过管道传输的命令
ls | code -

基本快捷键

有一些你知道会事半功倍的快捷键,我显然不会也不想去搬上各种全面的快捷键定义,我也记不住那么多,那么我们只需要对如下几个作一些了解,需要时也可以快速回顾。

  • 命令面板:Cmd+Shift+P 或 F1。 你一定得知道这个啊。
  • 快捷键表:命令面板中输入keyboard shortcuts。 到这里查其它你想学的快捷键,我不建议你记太多。然后很重要的一点,如果你发现一些快捷键不可用,可以在这里看一下是否被其它占据了。
  • 左侧边栏显示/隐藏:Cmd+b。别再去左边点击关闭了。我在写此文章时,因为开启了Markdown,这个快捷键就被Markdown扩展占据了(通过上面查到)。
  • 控制台终端显示/隐藏。 ctrl + ~, 也可以Cmd+J。或许Cmd+J更好按点,我一直觉得Ctrl+~挺反人类的:)
  • Tab选中:ctrl+1/2/3。快速跳到对应的文件上去。Ctrl+Tab则是显示文件列表。
  • 将某个已打开文件移动到单独窗口: ctrl + cmd + 右。有时候抄代码特别好用:)
  • 横向编辑器:Cmd+\,或按着Cmd再打开文件。
  • 纵向编辑器:Cmd+Option+0。有些人显示器竖着,或许得学会这一招?
  • 网格布局:Cmd+Shift+P后,输入Grid。
  • 禅模式(Toggle Zen Mode),隐藏其它面板,命令面板中输入Zen查看。想进入专注编码模式,不妨试试。效果好记得点赞,不对,记得绑定称手的快捷键。

基本编辑快捷键

鼠标

虽然我们提倡用键盘操作,但VSCode有几个很不错的鼠标小常识你可以知道下。或许你像我一样胡乱试的时候也意外发现了。

  • 单击,移动光标到位置
  • 双击,选中光标下的单词
  • 三击,选中这一行
  • 四击,选中整个文档
  • 选中后拖动,将一段文本移到某个位置(注意虚线)

移动

作为一个VIMer,相信你自然会安装并打开VSCode的vim扩展,所以基本的移动你不必再学。下面几个你也不必学,只需要一笑了之,你或许看到就能对应上vim的肌肉记忆了。

  • 按Option接左右,单词级别跳转。
  • 按Cmd接左右,行首/尾。
  • 按Cmd接上下,首行/末行。
  • 代码块间跳转(花括号间), Cmd+Shift+\

多光标能力

这是VSCode中很赞的一个功能,入门和登堂入室可能就差这一步了:)我们能顺利操作多光标,再配合VIM快捷键,如ciw替换某个单词等,批量修改,指哪打哪是很轻松的事。

  • 光标撤回,跳到之前光标的地方:Cmd+U。想不到刚才从哪过来的了?这个能唤醒你的记忆。
  • 多光标操作:
    • 定点打桩:这名字我瞎取的,你看像不像。你按住Option再点击光标,会在对应放置光标,依此可多处点击,然后可以一次输入,多个点同时修改简直太爽了,这比sed或%s还是好多了。
    • 全局改写:Cmd+Shift+L。根据当前光标单词,选中本文档中所有单词并添加光标,你可以一次性修改它们。
    • 精确指向:Cmd+D, 根据被选中内容创建多光标,可多按几次,每次往下找一个匹配的选中内容。如果你多选了也不要慌,上面说过,Cmd+U可以帮你撤回光标。当选中后,按A或c(vim指令)去改变刚才这一堆内容吧。
    • 列模式:这名字也是瞎取的,和vim的列模式有点像。Cmd+Option+上下键添加在上下行添加多光标,然后你可以使用0$等跳到各个地方去,添加各种字符。

其它操作

有几个不错的小技巧你可一试,特别是在进行代码重构时,比如下面的拖动,以及快速的查找替换。

  • 拖拽移动文本。试着把选中的文本拉来拉去?比如提取出一个函数?当然你会重构手法可能更快点。
  • 替换选中字符。在对应文本上按Cmd+Option+F,这会让你在进行查找替换时快一些。
  • 多文件搜索替换:Cmd+Shift+F。 同时支持设置包含的文件或排除的文件。这个功能一直在vim/nvim中找不到便捷的替代,他们都没VSCode中这般直观,还在持续寻找中,你有方案请一定告知我。

代码能力

上面是一些文本的编辑,VSCode作为被众多程序员采用的编辑器,自然写代码也是一好手,这里提供一些简要帮助。

符号跳转

  • 文件里类定义,符号等列表,方便跳转。Cmd+Shift+O。有时候想看一个文件大略时,也可以这么来一下。
  • 跨多文件搜索符号: Cmd + T。单文件搜索有时不够,文本搜索有时不是你想要的,符号表的搜索如函数名等,用它来试试?
  • 在定义和实现和引用间跳转,看代码这可能是必须的了
    • 跳定义:F12 或vim中的gd
    • 跳实现:Cmd+F12
    • 跳引用:Shift + F12。如果想在左边栏更清楚展示:Shift+Option+F12。

代码补全

在VSCode中一些代码补全经常是被一些关键字引出来,比如方法等在.之后会出现,那么当我们错过后,时常还要把.删掉再来一次,这显得有点傻。还有不少时候,我们对补全都是有要求的。

  • 再次显示补全建议:Ctrl+空格。如果你不生效,很可能是像我一样与系统的输入法切换冲突了。你可以改掉其中一个。
  • 显示补全参数: Cmd+Shift+空格。有时刚看了函数的签名又忘记了,按一下这个快捷键求它再给你一次机会。
  • 自动补全设置,有时候我们希望注释也能帮我补全一下,你得检查一下你的settings.json内容啦。
1
2
3
4
5
    "editor.quickSuggestions": {
        "comments": "on",
        "strings": "on",
        "other": "on"
    },
  • 自动提示修复: cmd+. 你也可以点那一行左边的黄色灯泡。在安装Copilot后还会有更多惊喜,不妨一试。

折叠与展开

有些人喜欢用折叠和展开,我倒是用得不太多,但这几个按键记起来也比较简单,可以收下。

  • 选中部分:Option+Cmd+[]。 这样可以将某个函数随时折叠或展开。
  • 全部折叠:Cmd+K后Cmd+0。哈,感觉清爽多了。
  • 全部展开:Cmd+K后Cmd+J。呃,又一大坨出来了。
  • 除本函数外,其它折叠: Cmd+K后Cmd+1
  • 只显示第二层级,函数内分支不显示:Cmd+K后Cmd+2
  • 还有Cmd+[3-9]。自行探索吧,我也不知道呢?

重构

其实相比于一些专业的商业化IDE,VSCode的重构功能还是比较弱鸡的,我印象比较深刻的是某J家的工具,有大量你还不会用的技法。既然只有这么点,就赶紧学起来吧。

  • 重命名: F2。这是必备的手段了,给变量,函数啥改名,单测都给你一并修改了,如果你还在用查找替换,我只能说,我太佩服你了。
  • 提取函数: 选中代码段,点击黄色灯泡(不是所有语言都支持)。只能说勉强能用吧,智能程度堪忧。

我也尝试了用Copliot重构代码(Copilot Chat),发现在VSCode中也有点蠢啊,为啥呢?你们一般是如何重构代码的?

插件推荐

有很多好用的插件,因人而异去使用就好了。比如号为神器的Remote-SSH插件,还有GitLens等,我看有几个可能知道的人不太多,那还是值得说一下。

Project Manager

方便多项目切换。收藏后,以后切换一键。请你不要再不停的找源码目录再去打开你天天开发的工程了,人家已经帮你省了这一步了。

Local History

我们有时代码改着改着,发现之前删除的又想要回来了,咋办?这个Local History只要曾经Save过,就能找回来。它不要求你文件提交到git等,所以可能某些时候能救急一下。误删了啥,你也不要太慌张。

后记

如果阅读代码,这块工作我更喜欢基于tmux+nvim等来进行,大量的工程打开状态的维护是VSCode的一个噩梦,但是tmux+nvim可以做得很棒。然而写代码还是喜欢VSCode,因为它的单测Debug更直接,它配合Copliot也更顺畅,还有它的大量查找替换的呈现更自然好用,甚至有时候它还是更稳定的选择。

同时,我也期待未来有时间,把nvim磨得更锋利一些,所向披靡,但目前各司其职也未尝不可。

我是个爱折腾技术的工程师,也乐于分享。欢迎点赞、关注、分享,更欢迎一起探讨技术问题,共同学习,共同进步。为了获得更及时的文章推送,欢迎关注我的公众号。

trigger