由于拒绝单独VimOverflow的建议,因此必须继续在此处发布。
我必须将翻译从一个文件移动到另一个文件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
模式的正则表达式。我怎么能在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
寄存器中我的内容粘贴到新标签页。
答案 0 :(得分:1)
要“注册”注册a
中的所有块,你可以在vim中尝试这个:
:g/msgid "buttonhelp\./norm! 2kV2)"Ay
在:g
cmd以上,msgid "buttonhelp\.
是与您的msgid匹配的正则表达式。
在执行:g
cmd之前,请执行qaq
清除a
注册。
答案 1 :(得分:1)
您可以通过yank
在所有匹配的行上找到(并执行:global
命令)。
如果您始终需要msgid
行上方和下方的行,则可以将其指定为范围 .-1,.+1
(.+2
以包含空行分隔线也是。)
要累积寄存器中的所有匹配项,请首先将其清除,然后使用大写字母(用于追加):
:let @a = '' | global/^msgid "\.\.\."/.-1,.+1yank A
要将其放入另一个缓冲区,您可以使用
:new | put! a