我有这个样本清单:
cat
dog
lion
此代码我需要将其插入:
<li><img src="images/opcje/{value}.png" alt=""/><label for="wezel">{value}</label><input type="checkbox" id="wezel" {if strstr($opcje,"-{order_number}-")} checked {/if} name="opcje[]" value="-{order_number}-"/></li>
示例输出:
<li><img src="images/opcje/cat.png" alt=""/><label for="wezel">cat</label><input type="checkbox" id="wezel" {if strstr($opcje,"-1-")} checked {/if} name="opcje[]" value="-1-"/></li>
有没有快速和DRY方法呢?
答案 0 :(得分:1)
您可以使用宏在vim中执行此操作。您可以通过按q
,然后按某个键来开始录制宏,宏将保存到该键中。例如,qa
将开始将宏记录到密钥(或注册)a
中。然后你会做一次替换,但你必须确保这样做,如果你之后执行宏它也适用于列表中的下一个单词。再次按q
可停止录制。如果您正确录制了宏,则可以按a
执行保存在寄存器@a
中的宏,这将自动执行下一次替换。
答案 1 :(得分:1)
您可以使用宏。它的工作原理如下:
vim my.xml
:sp
拆分窗口C-w j
转到底部窗口:e mylist.txt
现在你打开了这两个文件。让我们做一个宏!
qa
记录“a”宏dw
删除第一个列表项C-w k
转到顶部窗口1G
转到my.xml的开头/\{value\}
并按返回以查找{value}
P
过去{value}
wd7l
跳转到{value}
并将其删除C-w j
跳转到底部窗口q
结束录制宏现在多次调用你的宏。对于10个项目列表,请尝试:
10@a
瞧!
答案 2 :(得分:1)
也许像下面这样的小脚本会更合适:
#bash script
i=0;
for val in {cat,dog,lion}; do
i=$((i+1));
sed -e "s/{value}/$val/g;s/{order_number}/$i/g" your_code > new_code_$i
done