发生这种情况的原因是Lua Love 插件的一个有点奇怪的添加,我假设你正在使用它。您使用的是 Sublime 2,因此选择 Preferences -> Browse Packages... 打开您的 Packages 文件夹,然后打开 Lua Love 子文件夹。有一个文件叫completions.py,里面有这样的内容:
#completions.py
import sublime
import sublime_plugin
import re
class LoveCompletions(sublime_plugin.EventListener):
ST = 3000 if sublime.version() == '' else int(sublime.version())
def on_query_completions(self, view, prefix, locations):
if self.ST < 3000 and ("lua" in view.scope_name(locations[0])):
seps = view.settings().get("word_separators")
seps = seps.replace('.', '')
view.settings().set("word_separators", seps)
即使您不了解 Python,也很容易理解其中的逻辑。它将变量ST 设置为Sublime 的版本,如果您使用ST3(当前版本为3061)则为3000+,而ST2 为2221(我认为)。然后它会设置一个事件侦听器(该进程始终在后台运行)检查 Sublime 版本是否小于 3000(您使用的是 ST2)并且您在当前范围内有 lua(基本上,您的文件是source.lua 或source.lua.love,如果您使用插件的语言定义)。如果这两个都为真,它会从您的"word_separators" 设置中删除. 字符,该设置在Preferences -> Settings-Default 中定义并且可以在Preferences -> Settings-User 中被覆盖.
word_separators 设置控制在双击选择单词时哪些字符被视为单词分隔符。它的默认值为./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?,例如,如果你双击foo-bar的foo部分,Sublime只会选择foo,但是如果你双击@987654343的foo部分@Sublime 将选择整个事物(因为 - 在 word_separators 中)。 . 默认在word_separators 中,所以在foo.bar 中双击foo 只会选择foo,我认为这是大多数人的预期行为。但是,这个可爱的小插件从 Sublime Text 2 中的 word_separators 中删除了 .,因此在您的情况下,单击 Property 会选择从“单词”开头(Object 之前的空格)到下一个单词的所有内容分隔符 - :,在您的第二个示例中。
好的,所以我们知道问题出在哪里,我们该如何解决?首先,当您在Packages/Lua Love 中时,只需完全删除completions.py。这样做并没有什么坏处,事实上它实际上是在造成伤害。确保在删除文件后重新启动 Sublime。接下来,打开 Preferences -> Settings-User 并将 . 添加回 word_separators 列表中,在开始和结束双引号之间的任何位置。保存该文件,返回到您的源代码,双击应该会再次正常运行。
祝你好运!
编辑
我提交了这个pull request 以从插件的Github repo 中删除completions.py 文件,它刚刚被合并,所以希望将来的用户不必处理这个:)