SeaInside
@SeaInside
10 лет пилю все эти штуки

Можно ли вставлять сниппеты с условиями в VSCode, как в Sublime Text?

Доброго времени!
Есть ли возможность в VSCode вставить сниппет из кейбиндинга только в том случае, если перед местом вставки нет определённого символа?

Я хочу, чтобы при наборе "{" в CSS/SCSS файлах автоматически формировалась нужная структура.

То есть пишу:
.block{

Получаю:
.block {
  | <- курсор
}


С этим проблем нет:
5e698c5921ab2675705103.png
...но увы, в SCSS скобка используется не только в качестве открывающей конструкции, а также для интерполяции переменных #{$variable}.

Собственно сабж - чтобы сниппет не срабатывал в случае, когда перед курсором есть символ "#".

В том же Sublime Text работает прекрасно:
5e698d1180836867870929.png

Для VSCode чего-то такого не нашёл. Подскажет кто-нибудь, как быть?
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
SeaInside
@SeaInside Автор вопроса
10 лет пилю все эти штуки
В ходе дальнейших изысканий определено, что реализовать это можно только с помощью написания своего расширения и вызовом не editor.action.insertSnippet, а метода своего расширения, который проверит предшествующий символ и вставит сниппет, если всё окей.

В моём представлении написание настолько мелких расширений - моветон, решил свою проблему добавлением нового сниппета, который по нажатию на "ctrl+#" вставит #{$var}, а "shift+3" (#) остаётся за обычным октоторпом.

Кейбиндинги, если кому понадобится:
{
  "key": "shift+[",
  "when": "editorTextFocus && resourceExtname == .scss || resourceExtname == .css",
  "command": "editor.action.insertSnippet",
  "args": {
    "snippet": " {\n\t${0}\n}"
  }
},
{
  "key": "ctrl+3",
  "when": "editorTextFocus && resourceExtname == .scss || resourceExtname == .css",
  "command": "editor.action.insertSnippet",
  "args": {
     "snippet": "#{\\$${1:var}}"
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы