【问题标题】:How to select all instances of a variable and edit variable name in Sublime如何在 Sublime 中选择变量的所有实例并编辑变量名
【发布时间】:2013-05-26 12:42:39
【问题描述】:

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

是否有一个键盘快捷键可以让我选择变量的所有实例并一次性编辑它们?


我尝试过的事情:

DKU 让我一个接一个地选择它们,但我必须手动排除非可变字符串匹配:

并且使用 CtrlG 只需选择 all 字符串匹配:

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

【问题讨论】:

    标签: keyboard-shortcuts sublimetext key-bindings


    【解决方案1】:
    1. 将光标放在变量中。

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

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

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

    更多命令:

    查找全部: CtrlG 一次选择所有出现。不在 Mac 上? AltF3

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

    快速跳过下一个: KD 跳过下一个出现.不在 Mac 上? CtrlKCtrlD

    Sublime Docs

    【讨论】:

    • 什么是⌘,如何在非 MAC 键盘上做到这一点?
    • 至少在 ST3 中,您可以在没有其他 ⌘-D 命令的情况下执行 Ctrl-⌘-G。不幸的是,它在菜单中的标签非常错误!
    • 这没有回答 OP 的原始问题。他特地问了variable (not just any string)。这只是选择所有出现的字符串。
    • @BetjaminRichards 确保您没有选择(突出显示)变量。只需将光标移动到变量上,然后按 ⌘D。顺便说一句,这正是我对 MattDMo 的回答 (stackoverflow.com/a/16844924/483520) 遇到的问题。
    • @MuhammadUmer 与单词匹配的任何内容,并考虑边界。不是真正的变量搜索,但比简单的字符串匹配要好得多。
    【解决方案2】:

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

    简单的方法:AltF3

    【讨论】:

    • 它仍然选择里面有 foo 的所有东西。
    • 这个答案是针对这个问题的:stackoverflow.com/q/12162047/2270563。但这里的问题是不同的。仅选择变量而不是所有匹配项。
    • @user1767754 如果您不想选择所有包含foo 的内容,请不要选择第一个foo。相反,只需将光标放在单词foo 上,然后是Alt-F3。瞧
    • 这个答案是错误的。这将选择foo 的所有实例,而不仅仅是突出显示的实例。
    • 在 KDE 中不起作用,所以我只是在键绑定文件中添加了 { "keys": ["alt+d"], "command": "find_all_under" }:Preferences > Key BIndings . alt+d 似乎与那里的任何内容都没有冲突。
    【解决方案3】:

    尽管付出了很多努力,但我还没有找到一种内置或插件辅助的方式来做你想做的事情。我完全同意它应该是可能的,因为程序可以在您第一次突出显示 foobuffoon 时区分它,但似乎没有人知道这样做的方法。


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

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

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

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

    E, H - 使用当前选择作为查找中的“查找”字段,替换 (CtrlE,CtrlH)

    【讨论】:

    • 但是笔画只出现在变量名的出现周围,而⌘+D作用于所有出现的字符串。例如,如果我突出显示foo,sublime 会奇妙地描画所有变量foos,但不会在我的eject_buffoon 函数中描画字符串foo。然而使用上面的组合键,我不得不手动将⌘+K 排除在字符串匹配项之外,以避免使用eject_bufbarn 函数。一定有更好的办法!
    • @Nolan - 随时ask a question 看看是否有人有任何建议。一种可能的解决方法是选择foo_(foo 及其后的空格)或_foo_(前后都有空格),然后使用⌘-DCtrl-⌘-D
    • 我实际上认为这正是 OP 提出的问题。他特别说“variable”(不是“文本区域”或“string”)和“stroke”(不是“highlighting”)。而这个问题不是stackoverflow.com/questions/12162047/… 的重复——那个问题是“突出显示的选择”。当然,foo 经常以(foo)_foo,(foo,_foo} 的形式出现,所以_foo_ 很不令人满意。
    【解决方案4】:

    This 为我工作。将光标放在要替换的单词的开头,然后

    CtrlK, CtrlD, CtrlD ...

    这应该选择尽可能多的单词实例,然后您只需键入替换即可。

    【讨论】:

    • 这是除了已经提到的答案之外对我有用的答案。好!
    • 这没有回答问题。
    • @MD004 怎么会这样?
    • @hobs 问题是如何一次“选择所有这些实例”。我承认标题中问题的措辞模棱两可,但稍后在帖子中,OP 描述了您的解决方案并说“逐一选择它们,但我必须手动排除非可变字符串匹配“这是不令人满意的。顺便说一句,一个不令人满意的示例场景是,例如,当您要替换的单词出现 1000 次时,在这种情况下手动选择它们不是一种选择。
    • 啊,我明白了。谢谢你。现在我明白了为什么接受的答案对于 OP 的情况和你的 1000 次出现的例子要好得多。
    【解决方案5】:

    魔术是,你必须从一个空选择开始,所以把你的光标放在你想要多选的单词/字符的前面,然后按 Ctrl+D kbd> .

    【讨论】:

    • 这是单个字符变量的答案。对于任何其他变量,您可以将光标放在变量中的任意位置开始。
    • 这在 Sublime 3 中适用于我,如果您想将更改限制在函数内而不是整个文件中的较小区域,这是最简单的方法。当然是 macOS 的 Command-D。
    【解决方案6】:

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

    将此添加到您的 User Key Bindings(首选项 > 键绑定):

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

    现在您可以突出显示某些内容,按 Ctrl+Shift+D,它会将文件中的所有其他实例添加到选择中.

    【讨论】:

    • 这是唯一真正回答原始问题的答案!
    • 仍然选择字符串和 cmets
    • Ctrl-Shit-D 是一个相当标准的“重复选择”快捷键
    【解决方案7】:

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

    只需将光标放在变量名内,不要双击选择它。对于单字符变量,将光标放在变量的前面或结尾处,开始时不进行任何选择。

    现在继续点击 Cmd+D 以选择下一个变量或 Ctrl+Cmd+G 用于一次选择所有变量。它会神奇地只选择变量。

    【讨论】:

      【解决方案8】:

      mentioned by @watsonic 在 macOS 上的 Sublime Text 3 中,以 空选择 开头,只需 G(在 Windows 上为 AltF3)可以解决问题,而不是 D + G 在 Sublime Text 2 中。

      【讨论】:

        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            猜你喜欢
            • 2018-01-26
            • 2017-07-28
            • 1970-01-01
            • 2013-07-28
            • 2012-08-23
            • 1970-01-01
            • 1970-01-01
            • 2022-01-05
            • 2013-03-30
            相关资源
            最近更新 更多