Настройка фрагмента кода в Visual Studio с помощью регулярного выражения - PullRequest
0 голосов
/ 05 июня 2018
{
    "Comment": {
        "prefix": "#",
        "body":  "<!-- ${TM_FILEPATH/([^/]*\/[^/]*)$/$1/} -->"
    }
}

Я настроил фрагмент кода about, цель которого - добавить комментарий, который добавляет базовый каталог файла и имя файла <!-- templates/base.html -->, как это, но отбрасывает оставшуюся часть пути.Я полагаю, что это изначально основано на фрагментах TextMate.

enter image description here

Я перепробовал все, но не могу заставить его работать, возможно это что-то глупое, ноЯ не понимаю, что я делаю неправильно.

Использование только TM_FILEPATH
без регулярных выражений приводит к <!-- /Users/johndoe/Sites/blog/blog/templates/base.html -->

Я использовал это https://code.visualstudio.com/docs/editor/userdefinedsnippets длянайти пример, на котором будет основан мой код.Вот пример:

${TM_FILENAME/(.*)\\..+$/$1/}
  |           |        | |
  |           |        | |-> no options
  |           |        |
  |           |        |-> references the contents of the first
  |           |             capture group
  |           |
  |           |-> regex to capture everything before
  |               the final `.suffix`
  |
  |-> resolves to the filename

Благодаря идеям двух комментаторов я наконец-то смог заставить его работать.

Один комментатор поставил меня на путь с двойной обратной косой чертой впоймать косые черты в Windows и Unix.

Другой комментатор предложил квадратные скобки.

Окончательный результат:

{
    "Comment": {
        "prefix": "#",
        "body":  "<!-- ${TM_FILEPATH/.*[\\/](.*[\\/].*)$/$1/} -->",
    }
}

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

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

{
    "Comment": {
        "prefix": "#",
        "body":  [  
            "<!-- ${TM_FILEPATH/.*[\\/](.*[\\/].*)$$/$1/} -->",
        ]
    },
}
0 голосов
/ 05 июня 2018

Попробуйте что-то вроде этого:

"Comment": {
    "prefix": "#",
    "body":  [

      "<!-- ${TM_FILEPATH/.*\\\\(.*\\\\.*)$$/$1/} -->",

      "<!-- ${TM_DIRECTORY/.*\\\\(.*)$/$1/}/${TM_FILENAME} -->",
    ]
},

Эти две строки в теле должны быть эквивалентны.Это работает для стиля каталогов Windows, например:

 c:\Users\Mark\asdf\experimental\src\js\main.js

Так как ваши path.separators / попробуйте что-то вроде:

"<!-- ${TM_FILEPATH/.*\/(.*\.*)$/$1/} -->", 
"<!-- ${TM_FILEPATH/.*\\/(.*\\.*)$/$1/} -->",
"<!-- ${TM_FILEPATH/.*\\\/(.*\\\.*)$/$1/} -->",
"<!-- ${TM_FILEPATH/.*\\\\/(.*\\\\.*)$/$1/} -->",

Я просто не знаю, сколько обратной косой чертывам понадобится (и я не могу проверить это здесь) для вашей ОС.

...