当你在一个文本框或者某个输入框里打入字符时,会有一个竖线来显示你将要输入文字的位置,这就是“光标”。顾名思义,多光标其实就是多个输入位置,这里你可以脑补下多个竖线的场景。

6.1 创建多个光标

我还是以一段 CSS 代码作为例子来介绍吧,如果你要练习,直接把这段代码复制到编辑器中即可。

  1. .foo {
  2. padding: 5;
  3. margin: 5;
  4. font-size: 5;
  5. }

你可以看到,在上面这段 CSS 代码中,所有属性的值都是“5”,但你可能觉得这样的写法不规范,想把它们都改成 “5px”。之前你肯定是吭哧吭哧挨个在5后面加“px”。而现在,有了多光标特性之后,你第一步要做的事情,就是把光标移动到第一个 “5”的前面。接下来就有两种操作方式可以选择。

1. 使用鼠标

第一种添加多光标的方式,就是使用鼠标。在键盘上按住 “Option”(Windows 上是 Alt),然后鼠标点在第二个“5”之前,那么第二个光标就创建好了。现在你可以看到两个光标,第二个光标比第一个要细一点。

聪明的你肯定知道通过同样的方式来创建第三个光标。然后,按下右方向键,将光标们移动到 “5”的后面,输入“px”。这样,“5”后面就都已经加上“px”了,而这中间,你只做了一次输入。是不是很方便?
06讲 拒绝重复,你一定要学会的多光标特性 - 图1
按住 “Option” 创建三个光标,然后按下右方向键,最后输入 “px”

2. 使用键盘

首先你还是先移动光标到第一个“5”的前面。然后按下 “Cmd + Option + 下方向键”(Windows 上是 “Ctrl + Alt + 下方向键”),在当前光标的下面创建一个光标。
image.png
按住 “Cmd + Option + 下方向键” 在当前光标下创建新的光标
相信你已经看出来了,第二个光标,由于就在第一个光标的正下方,所以它不在第二行的“5”前面。不过没关系,我们有办法搞定它。先别急,你还是如法炮制,把第三个光标创建好。
image.png
按住 “Cmd + Option + 下方向键” 连续创建两个光标
下面你该尝试把光标移动到正确的位置啦。虽说现在三个光标的位置都是散乱的,没有什么规则,但你可以让它们移动到类似的位置:按下 “Cmd + 右方向键”(Windows 上是 End),这样它们就都移动到每一行的末尾了。
image.png
按住 “Cmd + 右方向键” ,光标全部移动到每一行的末尾
到这里问题就简单了,你只需按下 “左方向键” 将光标移动到 5的后面,然后输入 px即可完成整个操作。
image.png
对于这个样例而言,第一种方案比第二种要方便,但这两种方法解决问题的思路是一致的。前者通过鼠标操作,把光标移动到了你期望的位置,然后再执行别的操作;后者则是运用了 VS Code 内置的其他命令,把光标最终移动到你想要的位置。
在第二种方案中,你是把光标全部移动到行末,从而统一了光标的位置,进而进行“重复性”的操作。但这个问题的解决方案不是唯一的,你也可以想一想,还有没有其他别的解法。

6.2 创建多光标的两个特别命令

1. Cmd + D 选中多个相同的单词

06讲 拒绝重复,你一定要学会的多光标特性 - 图6
按住 “Cmd + D” 选中第二个 5
“Cmd + D” 这个命令的作用是,第一次按下时,它会选中光标附近的单词;第二次按下时,它会找到这个单词第二次出现的位置,创建一个新的光标,并且选中它。这样只需要按下三次,你就选中了所有的“5”。这个时候你再按下 “右方向键”,输入“px”,即可完成任务。
补充:
cmd-k cmd-d 跳过当前的选择
06讲 拒绝重复,你一定要学会的多光标特性 - 图7
按住 “Cmd + D” 选中多个5,按下右方向键,输入“px”
之所以说这个方法特别,是因为它的适用情况比较特别:处理多次出现的“相同”单词。如果你要处理的文本并不是相同的,那么这个方法就不适用了。

2. Ctrl+U 撤销光标

3. Option + Shift + i 多行代码创建光标

接下来讲讲第二种,是跟代码行批量处理有关,也还是用的前面的代码。首先你选择多行代码,然后按下 “Option + Shift + i” (Windows 上是 Alt + Shift + i),这样操作的结果是:每一行的最后都会创建一个新的光标。
06讲 拒绝重复,你一定要学会的多光标特性 - 图8
按住 “Option + Shift + i” 在选择内容的每一行末尾添加一个光标
同样的,这种方法是基于代码行的,如果你的需求是在同一行添加多个光标,那么就不适用了。

就上面的例子,我个人第一反应是使用“Cmd + D”这种方式来处理。也许你会问,是不是学习一种方式就够了呢?毕竟这些方式也不那么容易记忆。我的回答也很简单,你应该都学,然后熟能生巧,融会贯通。我前段时间读《鞋狗》这本书,里面有一段论述相当精彩:

在剑道中,只有在心中不再被我和你,不再被对手和他的剑,不再被自己的剑和使剑的方法所困扰时,才能达到最完美的状态……一切都是虚空:你自己、挥舞的剑和舞剑的胳膊,即便是空虚的想法都不再存在。

舞剑、做企业是这样,我们写代码用编辑器何尝又不是这个道理呢?