Поскольку предложение об отдельном VimOverflow было отклонено, придется продолжить публикацию здесь.
Мне пришлось переместить переводы из одного файла в другой, только msgid
соответствует какому-то определенному регулярному выражению.
Переводы повторяются блоками, а также могут занимать несколько строк:
# English.po
#: ...
msgid "..."
msgstr "..."
#: templates/common/commonTranslation.phtml:10 | These parts can be
#: any/number/of/lines/can/precede/the/data:0 | of any length.
msgid "buttonhelp.edit" <- Matching string
msgstr "Edit your details" |
"the long line continues" | Translation
"and can be even longer" |
#: ...
msgid "..."
msgstr "..."
Вот что я сделал в Sublime:
- Сделал регулярное выражение для шаблона
msgid
, который мне нужен. - Sublime помещает несколько курсоров вокруг файла.
- Вверх, Вверх, Shift-Вниз-Вниз-Вниз-Вниз – выделяются все блоки перевода с окружающими пустыми строками.
- Cmd-C, Вставить в новый файл. Готово.
Как я мог сделать это в Vim?
Просто повторюсь, мне нужно несколько вариантов, которые я могу извлечь в отдельный файл на основе значения msgid
. Вот как выглядит отдельный блок выбора, включая конечные и ведущие пустые строки:
#: templates/common/commonTranslation.phtml:10
msgid "buttonhelp.edit" # <- value for regexp
msgstr "Edit your details"
Обновить Извините, сначала я этого не осознавал, но переводы могут занимать неопределенное количество строк, вот где Sublime не справился, так как я выбрал блоки фиксированного размера. Но переводы всегда отделяются пустой строкой, кроме конца файла, но это можно не учитывать. Это кратчайший возможный объем данных:
#~ msgid "hotline.title" | POEdit stores obsolete
#~ msgstr "HOTLINE" | strings as well
Решено Благодаря комментаторам до меня наконец дошло, и вот что я в итоге сделал:
:let @a=''
:g/\v"\w+\.\w+"/norm! "Ayap
:tabe
:put A
Сначала он очищает регистр a
, находит все строки с точками между словами внутри кавычек ("\w+\.\w+"
) и копирует окружающие абзацы в регистр a
, содержимое которого я вставляю в новую вкладку.