Поскольку предложение для отдельного VimOverflow было отклонено, вам следует продолжить публикацию здесь.Vim: Как собрать все соответствующие и близлежащие строки из файла?
Мне пришлось перемещать переводы из одного файла в другой только msgid
соответствует определенному RegExp.
Переводы повторяются в блоках, а также они могут занимать несколько строк:
# 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 размещает несколько курсоров вокруг файла.
- Up, Up, Shift-Down-Down-Down-Down - все блоки перевода с пустыми линиями.
- 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
, содержимое которого я вставляю в новую вкладку.
Спасибо , это работало еще лучше, при условии, что он выбрал весь абзац, поскольку перевод может охватывать несколько строк, что я полностью пропустил в Sublime, и теперь мне придется перепроверить все:/Однако последний перевод был полностью опущен, файл заканчивается на 'sggid' линии без соответствующего перевода. Угадайте, что можно изменить, добавив пустую строку в конец. – firedev
Извините, не сделал себя чистым. В новом файле, который я получил после вставки буфера, последний перевод отсутствовал. Не уверен, как это возможно, есть пустая строка, поэтому ')' должно было работать. Я проверю его позже. – firedev
Я думаю, что что-то вроде '' Ayap' в конце вместо '2kV2 '' будет делать это еще лучше, поэтому он копирует весь блок перевода из верхней пустой строки в нижнюю. – firedev