ST3 - 将选择扩展到 Word 并快速查找下一个 - 在 Sublime Text 3.1.1 (B3176) 中对 Mac OS 的 cmd + d 进行双重赋值

ST3 - Expand Selection to Word and Quick Find Next - Double Assignment of cmd + d on Mac OS in Sublime Text 3.1.1 (B3176)

如果此问题的论坛不正确,请提前致歉 - 在任何类型的编程方面,我都是绝对的初学者。

似乎已为 ST3 中的 Expand Selection to Word(菜单 > 选择 > 将选择扩展到 Word)功能分配了与 Quick Add Next(菜单 > 查找 > 快速添加下一个)相同的键盘快捷键.

但是,即使手动点击这些选项ie,而不使用键盘快捷键),效果是一样的:点击"Expand Selection to Word"只是简单地找到下一个匹配的strong,并将其加入到当前选择中。

所以现在我想知道我是否只是从根本上误解了预期目的,即使语言看起来很明确。

  1. 有人可以确认这些函数的行为应该有所不同,并且

  2. 如果是这样,我该如何修复该行为以便我可以使用 expand selection to word 功能?

提前感谢您的宝贵时间和帮助!

对你的问题的简短回答是,这两个项目确实是同一件事,放在两个不同的地方并绑定到同一个键。这样做的原因是该命令根据您使用它的情况执行多项操作,这使得它适合这两个地方。

就其价值而言,这个特定命令的操作通常是新用户的绊脚石,因为它的作用有些微妙(如下所述)。

验证这是同一个命令;

  • 使用Preferences > Key Bindings打开快捷键window;在左侧窗格中,搜索 find_under_expand;你看到这个特定的键绑定(在 MacOS 上它使用 super 而不是 ctrl):

    { "keys": ["ctrl+d"], "command": "find_under_expand" },
    
  • 使用命令面板中的 View Package File,然后打开 Default/Main.sublime-menu 并执行相同的搜索;在不同的菜单项中对同一命令有多次点击:

    { "command": "find_under_expand", "caption": "Expand Selection to Word" },
    
    { "command": "find_under_expand", "caption": "Quick Add Next" },
    

你也可以用View > Show Console打开控制台,输入sublime.log_commands(True),然后触发命令,无论是哪个快捷键或菜单,控制台都执行相同的命令你使用的命令。


循环回到顶部,命令 find_under_expand 通常是新用户使用 Sublime 的绊脚石,因为它会根据情况做不同的事情。这使它非常强大和有用,但一开始可能会让您措手不及。

具体而言,该命令可能会执行以下几项操作:

  1. 如果至少有一个插入符号[=​​93=]没有select离子, 没有 selection 的所有插入符都在一个单词内,每个 "empty" 插入符处的 selection 被扩展以覆盖该插入符下的单词。因此,此命令在菜单中用作 Expand Selection to Word

  2. 如果所有插入符都不是"empty", 所有 selection 都包含相同的文本,该命令会查找下一次出现的 selected 文本,并通过在此处添加新的插入符将其添加到 selection 并且 select正在处理它。因此,此命令也可以用作 Quick Add Next

例如,这里是标准 lorem 片段的内容:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

如果您将插入符号放在第 1 行的第一个 dolor 并按下该键,文本 dolor 将被 select 编辑。这是#1 触发;插入符号没有 selection 并且在一个词中,所以 selection 被扩展了。再次按下该键,第 4 行中的 dolor 将添加到 selection。这是#2 触发;找到下一个文本并 selected.

现在我们可以通过按 Escape 返回到单个 selection 并移动光标以便我们返回到单个插入符号来重置内容并且没有 selected 文本。

现在将插入符号放入 dolor 并像以前一样再次按下 select 键。这次,在单词 amet 上使用 Ctrl+Click 在该位置添加第二个插入符号。现在我们有两个插入符,一个 select 在文本 dolor 中,一个在 amet 内部。如果你现在按下键,你就会得到#1; amet 被添加到 selection 中,但是无论你再按多少次,第 4 行的 dolor 都不会被添加到 selection 中。上面的 #2 项目仅在所有 selection 包含相同文本时触发。

如上再次重置,这次使用 Shift 和箭头键手动 select 第 1 行的单词 dolor。现在按下键可能会给你一点惊喜;第 2 行的单词 dolore 的一部分被 selected 并添加到 selection 中。第三次按 select 是第 4 行的 dolor,再按一次也会得到第 5 行 dolore 的一部分。

很明显,这个命令同时做了两件事;它会将光标处的 selection 扩展到当前单词,但它也会尝试查找 selected 文本的其他实例并添加它们。

其中经常让人们头脑混乱的部分是最后一个例子。正如我们在第一个案例中看到的,当我们通过按键让 Sublime select 为我们输入单词时,持续的按键确保只找到并添加确切的文本。但是,如果您首先手动 select 文本,则命令 select 将包含文本的所有实例,即使它不是一个完整的单词。

这非常强大,因为您可以通过首先将 selection 扩展为变量名称,然后 select 所有实例并键入新名称来轻松重命名变量。不用担心您可能 select 部分变量名。但是,如果您需要 select 部分单词,也可以使用。