Выделение возвышенного текста с использованием Lua / love2d

скажем, у меня есть эта строка кода:

Object.Property.field;
Object.Property:FunctionName();

на всех моих возвышенных языках, если бы я дважды щелкнул «Свойство» в любой строке, он выбрал бы только это слово. По какой-то причине моя подсветка синтаксиса lua / lua love2d выделяет всю строку до ":"

Как я могу изменить это поведение, чтобы оно выбирало только одно слово?


person user2616166    schedule 02.06.2014    source источник
comment
Какой синтаксис вы используете? Это Lua по умолчанию, который поставляется с Sublime, или вы установили плагин? Если вы установили плагин, каково его имя и URL?   -  person MattDMo    schedule 03.06.2014


Ответы (1)


Причина, по которой это происходит, заключается в несколько странном добавлении к подключаемому модулю 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, которая составляет 3000+, если вы используете ST3 (текущая сборка - 3061), и 2221 (я думаю) для ST2. Затем он настраивает прослушиватель событий (процесс всегда выполняется в фоновом режиме), проверяя, меньше ли версия Sublime 3000 (вы используете ST2), и у вас есть lua в вашей текущей области (в основном, ваш файл source.lua или source.lua.love, если вы используете определение языка плагина). Если оба утверждения верны, он удаляет символ . из параметра "word_separators", который определен в Preferences -> Settings-Default и может быть переопределен в Preferences -> Settings-User.

Параметр word_separators определяет, какие символы считаются разделителями слов при двойном щелчке для выбора слова. Его значение по умолчанию - ./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?, поэтому, например, если вы дважды щелкните foo часть foo-bar Sublime, будет выбран только foo, но если вы дважды щелкните foo часть foo_bar Sublime выберет все это (поскольку - находится в word_separators). . находится в word_separators по умолчанию, поэтому двойной щелчок по foo в foo.bar выберет только foo, что, как я полагаю, является ожидаемым поведением для большинства людей. Однако этот симпатичный маленький плагин удаляет . из word_separators в Sublime Text 2, поэтому в вашем случае щелчок по Property выбирает все от начала «слова» (пробел перед Object) до следующего разделителя слов - :, в данном случае вашего второго примера.

Итак, мы знаем, в чем проблема, как ее исправить? Во-первых, пока вы находитесь в Packages/Lua Love, просто удалите completions.py полностью. В этом нет ничего плохого, и на самом деле это причинение вреда своим присутствием. Обязательно перезапустите Sublime после удаления файла. Затем откройте Preferences -> Settings-User и добавьте . обратно в список word_separators в любом месте между начальными и конечными двойными кавычками. Сохраните этот файл, вернитесь к исходному коду, и двойной щелчок снова должен работать нормально.

Удачи!


ИЗМЕНИТЬ

Я отправил этот запрос на вытягивание, чтобы удалить completions.py файл из репозитория Github плагина, и он был просто объединены, так что, надеюсь, пользователям в будущем не придется с этим сталкиваться :)

person MattDMo    schedule 02.06.2014
comment
Ух ты ! +1 информация, +1 решение, +1 запрос, но никаких заметок для вас сегодня нет! у моего Preferences-settings-user нет разделителей word_separators, должен ли он это делать? - person user2616166; 05.06.2014
comment
@ user3700360, если word_separators там нет, не беспокойтесь об этом. Просто удалите Packages/Lua Love/completions.py, перезапустите Sublime, и все будет готово. - person MattDMo; 06.06.2014