Привязки клавиш в вашем вопросе не совсем корректны в том смысле, что некоторые области (потенциально) недействительны, и, по крайней мере, первая имеет синтаксическую проблему, из-за которой Sublime полностью игнорирует context
.
Область действия для файлов HTML, если вы используете встроенный синтаксис для HTML в Sublime, составляет text.html
, а не source.html
, что я отразил в привязках ниже. Кроме того, области действия для файлов Vue и CFC также могут быть неправильными. Я не использую эти языки, поэтому я только что установил первый найденный пакет, который поддерживает подсветку синтаксиса в этих типах файлов, так что вы можете использовать что-то другое, чем я выбрал.
Чтобы быть уверенным, вы можете использовать Tools > Developer > Show Scope Name
в главном меню (или нажать соответствующую клавишу), чтобы увидеть область при курсоре в любом файле во всплывающем окне. Обычно первая строка во всплывающем окне - это та, которую вы хотите использовать, чтобы ограничить привязки клавиш определенным типом файла.
Кроме того, в каждой из (исправленных) привязок ниже содержимое фрагмента было немного скорректировано, чтобы мы могли убедиться, что нужная вещь вставлена в нужное время.
Переплет # 1
{ "keys": ["ctrl+shift+c"],
"command": "insert_snippet",
"args": {
"contents": "console.log(`${1:}$SELECTION`);\nconsole.log(${1:}$SELECTION);\n${0}"
}, "context":
[
{
"key": "selector",
"operator": "equal",
"operand": ["source.js","source.html"],
"match_all": true
}
]
},
Эта привязка недопустима, поскольку operand
в context
должна быть строкой, а не списком строк. Таким образом, Sublime думает, что контекст нарушен, и молча игнорирует его, что делает Ctrl + Shift + C активным в каждом типе файла, что является поведением, которое вы сейчас видите.
Можно включить несколько областей в операнд, но вы делаете это как одну строку, а не как список. Примером этого является следующее:
{ "keys": ["ctrl+shift+c"],
"command": "insert_snippet",
"args": {
"contents": "/* js;html */ console.log(`${1:}$SELECTION`);\nconsole.log(${1:}$SELECTION);\n${0}"
}, "context":
[
{
"key": "selector",
"operator": "equal",
"operand": "source.js, text.html",
"match_all": true
}
]
},
Здесь операнд - это две области, разделенные запятыми, что делает привязку активной, пока область соответствует одной из них. Кроме того, область действия HTML была исправлена с source.html
до text.html
.
Переплет # 2
{ "keys": ["ctrl+shift+c"],
"command": "insert_snippet",
"args": {
"contents": "console.log(`${1:}$SELECTION`);\nconsole.log(${1:}$SELECTION);\n${0}"
}, "context":
[
{
"key": "selector",
"operator": "equal",
"operand": "source.vue",
"match_all": true
}
]
},
Эта привязка технически допустима, но source.vue
может быть неправильной областью для этого, в зависимости от того, какое определение синтаксиса вы используете для обеспечения подсветки синтаксиса для файлов Vue.
{ "keys": ["ctrl+shift+c"],
"command": "insert_snippet",
"args": {
"contents": "/* vue */ console.log(`${1:}$SELECTION`);\nconsole.log(${1:}$SELECTION);\n${0}"
}, "context":
[
{
"key": "selector",
"operator": "equal",
"operand": "text.html.vue",
"match_all": true
}
]
},
Для выбранного пакета с подсветкой синтаксиса Vue область действия для файлов Vue составляет text.html.vue
, что я здесь и отразил; в противном случае все в этой привязке верно.
Обратите внимание, что область действия для HTML равна text.html
, а область действия для Vue - text.html.vue
. Следуя правилам сопоставления областей, text.html.vue
соответствует области действия text.html
, что имеет некоторые последствия для привязок в зависимости от того, что вы хотите, чтобы произошло (и при условии, что эта область соответствует пакету, который вы используете).
Если вы хотите внедрить тот же код в Vue, что и в HTML-файлах, вы можете полностью исключить эту привязку, и приведенная выше для HTML будет соответствовать ей и делать то, что вы хотите напрямую.
С другой стороны, если вы хотите сделать что-то особенное для Vue, важно, чтобы эта привязка пришла после привязки HTML в вашем файле привязок клавиш. Sublime оценивает привязки клавиш в нижней части файла и использует первый, который соответствует. Так как text.html.vue
соответствует text.html
, вам нужно иметь специальное правило для файлов Vue ниже в файле, чтобы убедиться, что он найден и используется первым.
Переплет # 3
{ "keys": ["ctrl+shift+w","ctrl+shift+c"],
"command": "insert_snippet",
"args": {
"contents": "writeDump(${1:}$SELECTION\"$2);\nabort;\n${0}"
}, "context":
[
{
"key": "selector",
"operator": "equal",
"operand": "source.cfc",
"match_all": true
}
]
},
Опять же, за исключением того, что область действия этой привязки потенциально неверна, в этой привязке нет ничего плохого, кроме того, что, исходя из вашего описания выше, она может не выполнять то, что вы ожидаете.
{ "keys": ["ctrl+shift+w","ctrl+shift+c"],
"command": "insert_snippet",
"args": {
"contents": "writeDump(${1:}$SELECTION\"$2);\nabort;\n${0}"
}, "context":
[
{
"key": "selector",
"operator": "equal",
"operand": "embedding.cfml",
"match_all": true
}
]
},
Область в пакете CFML, которую я выбрал для тестирования, использует embedding.cfml
в качестве области действия, что отражено здесь.
Более важно, используя два ключа в качестве списка в привязке, например, это превращает привязку в аккорд клавиш . Это означает, что для того, чтобы вызвать это, вам нужно нажать Ctrl + Shift + W , а затем Ctrl + Shift + c .
Из описания вашего вопроса звучит, что вам могут понадобиться две разные привязки клавиш, которые обе выполняют одно и то же.Если это так, то вам нужно продублировать всю привязку и изменить ключ во второй.