如何在Sublime中选择所有变量实例并编辑变量名称

456
如果我在代码中选择一个变量(而不只是任何字符串),则该变量的所有其他实例都会被勾画出来(具有白色轮廓): enter image description here 是否有键盘快捷方式可以让我选择这些变量的所有实例并一次性编辑它们?
尝试过的方法:
使用 ⌘D、⌘K 和 ⌘U 可以让我逐个选择它们,但我必须手动排除非变量字符串匹配项: enter image description here 使用 Ctrl+⌘G 仅选择所有字符串匹配项: enter image description here 很明显,Sublime 能够区分变量和字符串匹配。难道没有办法只选择变量匹配吗?
10个回答

654
  1. 将光标放在变量中。

    注意:关键是要从空白处开始。不要高亮显示;只需在那里置光标。

变量上的文本光标

  1. 按需要按D。不是Mac?使用CtrlD

突出显示更多变量实例

没用?再试一次,确保开始未选择任何内容

更多命令:

查找所有:CtrlG一次选择所有出现的位置。不是Mac?AltF3

撤销选择: U 向后步骤。不是Mac?CtrlU

快速跳过下一个:KD跳过下一个出现。不是Mac?CtrlKCtrlD

Sublime文档


14
⌘ 是MAC键盘上的命令键,通常用于执行快捷键操作。在非MAC键盘上如何使用该键需要按照键盘设置进行配置。 - Bjarke Freund-Hansen
8
在ST3中,您可以执行Ctrl-⌘-G而无需使用另一个⌘-D命令。遗憾的是,菜单中的标签非常错误! - watsonic
35
这并没有回答提问者的问题。他特别询问了“变量(而不仅仅是任意字符串)”。这只是选择字符串的所有出现次数。 - Betjamin Richards
19
请确保您没有选择(突出显示)该变量。只需将光标移至变量上,然后按下⌘D即可。顺便说一句,这正是我在MattDMo的答案中遇到的问题(https://dev59.com/HWQn5IYBdhLWcg3wa2qV#16844924)。 - Nolan Amy
2
@Doglas 在 Sublime Text 3 中,不要使用 Ctrl D,而是使用 Alt F3 - Franklin Yu
显示剩余11条评论

139

我知道这个问题是关于Mac的,但我在搜索Ubuntu的答案时到这里来了,所以我想我的回答可能对某些人有用。

简单的方法是:AltF3


10
它仍然选择所有包含"foo"的内容。 - user1767754
1
这个答案是针对问题:https://dev59.com/_mct5IYBdhLWcg3wV8Ck。但这里的问题有所不同。只选择变量而不是所有匹配项。 - RamValli
4
如果您不想选择所有包含“foo”的内容,就不要先选择第一个“foo”。相反,只需将光标放在单词“foo”上,然后按下“Alt-F3”即可。完成! - Anwar
这个答案是错误的。它会选择所有的 foo 实例,而不仅仅是高亮显示的那些。 - André C. Andersen
在KDE中无法正常工作,因此我只是将{“keys”:[“alt + d”],“command”:“find_all_under”}添加到键绑定文件中:首选项>键绑定。 在那里,alt + d似乎不会与任何东西冲突。 - user1985553

53
尽管有很多的尝试,我没有找到可以内置或插件协助完成你所需的功能。我完全同意这是“应该”可能的,因为程序可以在你第一次高亮时区分“foo”和“buffoon”,但似乎没有人知道如何做到这一点。
然而,在Sublime Text 2中,以下是一些有用的键盘组合来选择单词: CtrlG - 选择当前单词的所有出现(Windows/Linux上为AltF3D - 选择当前单词的下一个实例(CtrlDK,D - 跳过当前实例并继续选择下一个实例(CtrlK,CtrlDU - “软撤消”,返回到先前的选择(CtrlUE, H - 在查找和替换中使用当前选择作为“查找”字段(CtrlE,CtrlH

7
但是该笔画仅出现在变量名出现的地方,而⌘+D则作用于字符串的所有出现。例如,如果我突出显示了foo,Sublime会很好地对所有变量foo进行笔画,但不会对我的eject_buffoon函数中的字符串foo进行笔画。然而,使用上述快捷键组合,我被迫手动⌘+K退出字符串匹配,以避免出现eject_bufbarn函数。一定有更好的方法! - Nolan Amy
@Nolan - 随意提问,看看有没有人有什么建议。一个可能的解决方法是选择foo_(foo和后面的空格)或_foo_(前后都有空格),然后使用⌘-DCtrl-⌘-D - MattDMo
7
我认为这正是OP所问的问题。他明确提到“变量”(而不是“文本区域”或“字符串”)和“笔画”(而不是“高亮”)。而且这个问题不是https://dev59.com/_mct5IYBdhLWcg3wV8Ck的重复——那个问题中提到的是“高亮选择”。当然,`foo`经常出现为`(foo)`、`_foo,`、`(foo,_foo},所以_foo_`并不是很令人满意。 - Nolan Amy

21

这个方法对我来说管用。将光标放在您想要替换的单词开头,然后按下

CtrlK, CtrlD, CtrlD ...

这样应该会选择您想要替换的单词的所有实例,然后您只需键入替换结果即可。


1
这是对我有效的答案,除了已经提到的答案。很好! - Akash
这并没有回答问题。 - MD004
@MD004 怎么了? - hobs
@hobs 问题是如何一次性“选择所有这些实例”。我承认标题中的问题措辞不明确,但在帖子后面,OP描述了您的解决方案,并说这“逐个选择它们,但我必须手动排除非变量字符串匹配”,这是不令人满意的。顺便说一句,当有1000个要替换的单词出现时,手动选择它们不是一个选项。 - MD004
1
啊,我明白了。谢谢你。现在我明白为什么被采纳的答案对于OP的情况和你的1000次出现的例子更好。 - hobs

13

魔法在于,你必须从空选区开始,所以请将光标放在您想要多重选择的单词或字符前面,并按下 Ctrl+D


2
这是单个字符变量的答案。对于任何其他变量,您可以在变量的任何位置放置光标以开始。 - Manish Singh
这对我在Sublime 3中有效,如果您想将更改限制在较小的区域(如函数内部)而不是整个文件中,则这是最简单的方法。当然,对于macOS来说,可以使用Command-D。 - Ryan H.

10

对我来说,这是Sublime中最大的错误。 Alt+F3很难到达/记住,而 Ctrl+Shift+G 毫无意义,考虑到 Ctrl+D 是"添加下一个实例到选择"。

将此添加到您的用户密钥绑定(首选项 > 密钥绑定):

{ "keys": ["ctrl+shift+d"], "command": "find_all_under" },

现在,你可以选择并突出显示某些内容,按下Ctrl+Shift+D,这将使文件中的每个其他实例都添加到选定内容中。


2
这是唯一一个真正回答了原问题的答案! - user2317421
1
仍然选择字符串和注释 - Wassadamo
1
Ctrl-Shift-D 是一个相当标准的“复制选择”快捷键。 - stijn

6
如用户1767754所说,关键在于最初不要进行任何选择。
只需将光标放在变量名称内部,不要双击进行选择。对于单个字符变量,将光标放在变量的前面或后面以避免最初进行选择。
现在,继续按下Cmd+D进行下一个变量选择,或按下Ctrl+Cmd+G一次选择所有变量。它会神奇地仅选择变量。

5

@watsonic提到,在macOS上的Sublime Text 3中,从空选择开始,简单地使用G(在Windows上为AltF3)就可以完成操作,而不是在Sublime Text 2中使用D+ G


0

在2020年10月17日,如果您选择一个文本元素并按下CTRL+SHIFT+ALT+M,则它将突出显示代码块中的每个实例。


-1

假设有人在寻找一种在多个文件中替换字符串的方法时偶然发现了这个问题,可以使用 Command+Shift+F


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接