Как переопределить синтаксис завершения пакета Sublime Text 3 (CSS3) - PullRequest
0 голосов
/ 07 января 2020

Я использую пакет CSS3 с Sublime Text 3.

Я пытаюсь изменить поведение при вводе свойства CSS. Например, с учетом следующего:

body {
  | <- insertion point
}

Если я наберу background и нажму tab, результатом будет background:, что я и хочу.

Если я наберу background:, когда я набираю двоеточие, строка меняется на background: ; с точкой вставки перед точкой с запятой. Я не хочу этого, так как я всегда сам набираю пробел после двоеточия, заканчивая там двумя пробелами. Я не хочу переобучать свою мышечную память, так как все мои другие среды редактирования не добавляют пространство автоматически.

Я действительно хотел бы выяснить, как переопределить это поведение завершения.

Я пытался отредактировать файл completions/properties.py внутри пакета CSS3, но это не похоже на источник этого завершения. К сожалению, я не знаю достаточно о том, как пакеты ST собираются вместе, чтобы понять это.

1 Ответ

0 голосов
/ 08 января 2020

Завершения, поступающие из completions/properties.py, используются обработчиком пакета on_query_completions, который используется Sublime для заполнения всплывающего окна автозаполнения. Таким образом, изменение содержимого там (и перезапуск Sublime для повторной загрузки пакета) изменит то, что предлагается во всплывающем окне автозаполнения (или то, что может быть автоматически выбрано как лучшее завершение, при правильных обстоятельствах).

    ("background", "background: ${1};"),

Указывает, что триггер автозаполнения background должен расширяться до имени свойства, за которым следуют двоеточие и пробел, а курсор остается на ${1}, поэтому что-то вроде back Tab расширяется до background: |;; это место для изменения, если вы хотите добавить или изменить эти виды завершений.

С другой стороны, ваша проблема заключается в том, что нажатие : - это то, что вызывает пространство для вставки. На самом деле это не то, что связано с автозаполнением, хотя это не совсем очевидно, если посмотреть на него.

Если вы включите ведение журнала команд (View > Show Console, sublime.log_commands(True)) и выполните указанные выше действия, когда вы нажимаете : , и вы видите это в консоли:

command: insert_snippet {"contents": ": $0;"}

Это признак того, что имеется привязка клавиш, которая делает это для вас. Использование View Package File из палитры команд и фильтрация с помощью css3 keymap позволят вам открыть CSS3/Default.sublime-keymap, где первая привязка ключа - это то, что делает это:

    { "keys": [":"], "command": "insert_snippet", "args": {"contents": ": $0;"}, "context":
        [
            { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
            { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
            { "key": "selector", "operator": "equal", "operand": "meta.declaration-list.css, meta.at-rule.color-profile.block.css, meta.at-rule.counter-style.block.css, meta.at-rule.font-face.block.css, meta.font-feature-type-block.css, meta.at-rule.font-palette-values.block.css, meta.at-rule.page.block.css -meta.page-margin-box.css, meta.at-rule.viewport.block.css", "match_all": true },
            { "key": "selector", "operator": "not_equal", "operand": "meta.selector.css", "match_all": true },
            { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\}|$)", "match_all": true }
        ]
    },

context, примененный к этой привязке, обеспечивает что он срабатывает в этой конкретной ситуации и вручную запускает команду insert_snippet, чтобы вставить для вас пробел и точку с запятой.

Чтобы не делать этого, скопируйте эту привязку из этого файла в свой собственный файл привязок клавиш и измените contents, чтобы не включать пространство, которое вам не нужно.

Я не использую этот пакет, но на основе селекторов области действия в context это может сработать в нескольких различных случаях, а не только в этом; во всех случаях это приведет к вставке пробела.

Если ваша мышечная память всегда вставляет пробел в ответ на ввод :, то это не имеет большого значения; если это так, вам потребуется изменить скопированную привязку, чтобы изменить строки контекста selector, чтобы они соответствовали только при редактировании свойства. Это может привести к тому, что Sublime выберет привязку вашего ключа в этом случае, но в других случаях откажется от привязки к пакету.

...