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


428

如果我在代码中选择了一个变量(不仅是任何字符串),那么该变量的所有其他实例都会在它们周围出现笔触(白色轮廓):

在此处输入图片说明

是否有键盘快捷键可以让我选择该变量的所有这些实例并立即对其进行全部编辑?


我尝试过的事情:

D,,K然后U让我一一选择它们,但是我必须手动排除非变量字符串匹配项:

在此处输入图片说明

并且使用CtrlG简单地选择所有的字符串匹配:

在此处输入图片说明

显然,Sublime能够区分变量匹配和字符串匹配。没有办法只选择变量匹配项吗?

Answers:


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

    注意:关键是从一个空的选择开始。不要突出显示;只需光标放在此处。

文本光标放在变量上

  1. D根据需要按。不是在Mac上?使用CtrlD

更多的变量实例突出显示

没工作吗 再试一次,确保从没有选择任何内容开始

更多命令:

全部查找: CtrlG一次选择所有事件。不是在Mac上?AltF3

撤消选择: U后退。不是在Mac上?CtrlU

快速跳过下一个: KD跳过下一个事件。不是在Mac上?CtrlKCtrlD

崇高文档


14
⌘是什么,您如何在非MAC键盘上执行此操作?
Bjarke Freund-Hansen

6
至少在ST3中,您无需其他⌘-D命令就可以执行Ctrl-⌘-G。不幸的是,它在菜单中贴错了标签!
watsonic 2014年

30
这不能回答OP的原始问题。他专门问variable (not just any string)。这只是选择所有出现的字符串。
Betjamin Richards 2014年

17
@BetjaminRichards确保您没有选择(突出显示)变量。只需将光标移到变量上,然后按⌘D。顺便说一句,这正是我与MattDMo的答案有关的问题(stackoverflow.com/a/16844924/483520)。
Nolan Amy

2
@MuhammadUmer匹配单词,并考虑边界的任何事物。不是真正的变量搜索,但是比简单的字符串匹配要好得多。
诺兰·艾米

135

我知道问题是关于Mac的,但我到这里来寻找Ubuntu的答案,所以我想我的答案可能对某人有用。

简单的方法来做到这一点:AltF3


10
它仍然会选择里面包含foo的所有内容。
user1767754

1
这个问题的答案是:stackoverflow.com/q/12162047/2270563。但是这里的问题是不同的。仅选择变量而不是所有匹配项。
拉姆

4
@ user1767754如果您不想选择其中的所有foo内容,请不要选择第一个foo。而是将光标放在单词中foo,然后Alt-F3。Voila
Anwar

这个答案是错误的。这将选择所有实例,foo而不仅仅是突出显示的实例。
安德烈C.安德森

在KDE中不起作用,因此我只向密钥绑定文件添加了{“” keys“:[” alt + d“],” command“:” find_all_under“}:首选项> Key BIndings。alt + d似乎与那里的任何内容都没有冲突。
user1985553'5

47

尽管付出了很多努力,但我还没有找到内置的或插件辅助的方法来执行您要尝试执行的操作。我完全同意,这应该是可能的,因为程序可以区分foobuffoon当你第一次选中它,但似乎没有人知道做这件事的方式。


但是,这里有一些有用的键组合,用于选择Sublime Text 2中的单词:

CtrlG-选择所有出现的当前单词(AltF3在Windows / Linux上)

D-选择当前单词的下一个实例(CtrlD

  • KD-跳过当前实例并继续选择下一个实例(CtrlKCtrlD
  • U-“软撤消”,移回上一个选择(CtrlU

EH-使用当前选择作为“查找和替换”(CtrlECtrlH)中的“查找”字段


6
但是笔触仅出现在变量名的周围,而⌘+D作用于字符串的所有出现。例如,如果我突出显示foo,sublime会很好地描画所有变量foos,而不是foo我的eject_buffoon函数中的字符串。但是使用上面的组合键,我不得不手动⌘+K删除字符串匹配项,以免产生eject_bufbarn功能。肯定有更好的办法!
Nolan Amy

@Nolan-随时问一个问题,看看是否有人有任何建议。一种可能的解决方法是选择foo_(foo及其后面的_foo_空格)或(之前和之后的空格),然后使用⌘-DCtrl-⌘-D
MattDMo

7
我实际上认为这恰恰是OP提出的问题。他专门说“ 变量 ”(不是“文本区域”或“字符串”)和“ 笔画 ”(不是“突出显示”)。这个问题不是stackoverflow.com/questions/12162047/…的重复-那个人说“突出显示的选择”。此外,当然,foo往往表现为(foo)_foo,(foo,,和_foo},因此_foo_是非常不理想。
Nolan Amy

21

对我有用。将光标放在要替换的单词的开头,然后

CtrlKCtrlDCtrlD...

那应该选择尽可能多的单词实例,然后您可以键入替换单词。


1
对于已经提到的答案,这是对我有用的答案。好!
阿卡什(Akash)2017年

这不能回答问题。
MD004

@ MD004怎么样?
滚刀

@hobs的问题是如何“选择所有这些情况下的” 一次。我承认标题中问题的措词不明确,但稍后在OP中介绍了您的解决方案,并说这“一对一地选择它们,但我必须手动排除非可变字符串匹配项”,这是不令人满意的。顺便说一句,这种情况不能令人满意的示例场景是,当您要替换的单词有1000次出现时,在这种情况下,手动选择它们是不可行的。
MD004

1
嗯,我明白了。谢谢。现在,我知道为什么对于OP的情况和您的1000次出现示例,可接受的答案要好得多。
滚刀

12

魔术是,您必须先选择一个空的内容,然后将光标置于要多选的单词/字符的前面,然后按Ctrl+ D


2
这是单个字符变量的答案。对于任何其他变量,您可以将光标放在变量中的任何位置。
manish_s

这在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,它将把文件中的所有其他实例添加到选择中。


1
这是实际回答原始问题的唯一答案!
kmundnic

仍然选择字符串和注释
Wassadamo

4

它是由@watsonic提到的是,在Mac OS上崇高的文本3,从一个空的选择,只是GAltF3在Windows上)的伎俩,而不是D+ G在崇高的文本2。


4

正如user1767754所说的,这里的关键是最初不要进行任何选择。

只需将光标放在变量名内,不要双击将其选中。对于单字符变量,请将光标放在变量的开头或结尾以使最初不进行任何选择。

现在继续把球击Cmd+ D为下一个变量选择或Ctrl+ Cmd+ G可以一次选择所有的变量。它将神奇地选择变量。


0

以防万一其他人在寻找一种在多个文件中替换字符串的方法时偶然发现了这个问题,它是Command+ Shift+F

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.