我有许多电子邮件模板供mailchimp内部使用,它们当前正在使用标准合并标记ala *|SUBJECT|*
。我想将这些模板转换为把手使用。
我可以轻松地使用%sno/*|/{{
和%sno/|*\}}
来交换标签定界符,但这给我留下了全大写的名字,例如{{SUBJECT}}
。是否有一个很好的命令可以在VIM中强制双花括号内的小写字母,这样我就不必搜寻并更改每个变量了?
更快的问题描述:
我在电子邮件模板中有很多类似的情况:
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>*|SUBJECT|*</title>
我反而想要这个:
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{subject}}</title>
到达那里我需要什么VIM命令?
答案 0 :(得分:5)
一次完成所有操作如何?
:%s/\*|\(.\{-}\)|\*/{{\L\1\E}}/g
请参见:help sub-replace-special
。
答案 1 :(得分:3)
尝试一下
:%s/{{\w\+}}/\=tolower(submatch(0))/g
使用正则表达式的匹配项,将其替换为小写。
:h tolower
了解更多
答案 2 :(得分:3)
要仅使{{SUBJECT}}
字符串小写,可以使用g
命令,如下所示:
:g/{{[A-Z]\+}}/normal gugu
答案 3 :(得分:3)
对于单个实例,您可以选择大括号内的文本,并使用以下命令强制将其小写(在正常模式下):
vi}gu
从那里,您可以构建一个宏来搜索下一个事件,并为您运行命令。看起来像这样:
qq/{{.*}}<enter>wvi}gUq
100@q
第一部分创建一个宏,该宏搜索模式{{。*}},移至下一个单词(将在方括号内),可视地选择内部方括号内的所有文本,然后将其转换为小写。第二行只是如何调用宏100次的示例。
答案 4 :(得分:1)
另一种选择用一行vim代码进行替换和小写。使用“ g”命令仅对包含“ * |”的行进行操作定界符。
:g/\*|/s/\*|/{{/|s/|\*/}}/|normal guu