在VIM中的花括号内使文本小写

时间:2018-07-24 20:33:09

标签: html vim handlebars.js

我有许多电子邮件模板供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命令?

5 个答案:

答案 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