崇高的文本选择使用Lua/love2d



假设我有这行代码:

Object.Property.field;
Object.Property:FunctionName();
如果我双击任意一行的"属性",它就会选择那个单词。由于某些原因,我的lua/lua love2d语法高亮选择了整行直到":"

我如何改变这个行为,使它只选择单个单词?

出现这种情况的原因是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(我认为)。然后,它设置了一个事件监听器(进程总是在后台运行)检查,看看崇高的版本是否小于3000(你使用ST2),你有lua在你当前的作用域(基本上,你的文件是source.luasource.lua.love,如果你使用插件的语言定义)。如果这两个都为真,则从"word_separators"设置中删除.字符,该设置在 Preferences -> Settings-Default 中定义,并且可以在 Preferences -> Settings-User 中覆盖。

word_separators设置控制在双击选择单词时哪些字符被认为是单词分隔符。它的默认值是./\()"'-:,.;<>~!@#$%^&*|+=[]{}`~?,因此,例如,如果你双击foo-barfoo部分,Sublime将只选择foo,但如果你双击foo_barfoo部分,Sublime将选择整个内容(因为-word_separators中)。默认情况下,.word_separators中,因此双击foo.bar中的foo只会选择foo,我认为这是大多数人的预期行为。然而,这个可爱的小插件从Sublime Text 2中的word_separators中删除了.,所以在你的情况下,点击Property将选择从"word"开头(Object之前的空白)到下一个单词分隔符的所有内容- :,在你的第二个例子中。

好了,所以我们知道问题是什么,我们如何解决它?首先,当您在Packages/Lua Love时,只需完全删除completions.py。这样做并没有什么害处,事实上,在那里会对造成伤害。确保在删除文件后重新启动Sublime。接下来,打开 Preferences -> Settings-User 并将.添加回word_separators列表中,位于开始和结束双引号之间的任何位置。保存该文件,返回到源代码,双击应该会再次正常运行。

祝你好运!


编辑

我提交了这个pull request来删除completions.py文件从插件的Github repo,它刚刚合并,所以希望用户在未来将不必处理这个:)

最新更新