VsCode Snippet PlaceHolder значение по умолчанию File_Name_Base + прописные буквы - PullRequest
1 голос
/ 28 января 2020

Чтобы выиграть немного времени в будущем, я пытаюсь создать несколько фрагментов для VsCode.

Здесь есть контекст. У меня есть файл tmp.hpp, в котором я хочу получить

#ifndef TMP_HPP_
    #define TMP_HPP

#endif

Моя проблема в том, что я хочу иметь возможность изменять TMP так, как мне хочется. Для этого я хочу, чтобы оно было значением по умолчанию. Наконец, если я решу изменить TMP на WHATEVER, я хочу заставить WHATEVER быть в верхнем регистре.

Чтобы быть более точным, я хочу, чтобы мой ${1} будет иметь значение по умолчанию: ${TM_FILE_BASE}, и я также хочу, чтобы ${1} и / или мой ${TM_FILE_BASE} был ${/upper}

Вот что я получил на данный момент:

"Creates a ifndef": {
    "prefix": "ifndef",
    "body": [
      "#ifndef ${${1:TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
      "  #define ${${1:TM_FILENAME_BASE/(.*)/${1:/upcase}/}_HPP_",
      "",
      "#endif"
    ],
    "description": "Creates a basic ifndef"
}

Спасибо

1 Ответ

3 голосов
/ 28 января 2020

Вам необходимо использовать вложенные переменные:

"Creates a ifndef": {
    "prefix": "ifndef",
    "body": [
      "#ifndef ${1:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
      "  #define ${1:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
      "",
      "#endif"
    ],
    "description": "Creates a basic ifndef"
}

Обратите внимание на часть ${1:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}. Здесь ${1:...} - это синтаксис для заполнителя, а thr ${TM_FILENAME_BASE/(.*)/${1:/upcase}/} внутри него указывает переменную, которая изменяется с помощью замены на основе регулярных выражений (все содержимое сопоставляется и захватывается в Группу 1 с помощью /(.*)/ и заменяется на вариант в верхнем регистре с использованием ${1:/upcase}/} (здесь $1 является заполнителем значения группы 1)).

...