Как расширить текущее имя файла без 'test' в vimscript или UltiSnips

Я пишу фрагмент, в котором мне нужно получить текущее имя файла в vimscript. Я могу сделать это счастливо с expand('%:t:r') (как показано здесь). Однако я хотел бы не только исключить ".js" из имени файла, но и ".test".

например

Если в myName.test.jsЯ хотел бы получить "myName"

Если в myName.jsЯ также хотел бы получить "myName"

Я делаю это, чтобы создать фрагмент UltiSnips, чтобы другие методы (например, регулярное выражение) также были бы полезны

1 ответ

Решение

:t а также :r являются модификаторами имени файла. Если вы следуете :help filename-modifiers Есть также отличный (но малоизвестный) :s?pat?sub? модификатор, который может выполнять замены. Поскольку это можно комбинировать с другими модификаторами, все, что вам нужно сделать, это сопоставить .test привязанный к концу имени файла:

:echo expand('%:t:r:s?\.test$??')

Там нет ошибки, если замена не удалась, поэтому нет необходимости делать сопоставление необязательным (через \?).

Другие вопросы по тегам