我有这样的HTML代码。
<tr>
<td>$value</td>
<td>$value</td>
<td>$value</td>
</tr>
我希望使用数组$value
中的值更改所有new_value = ['Noodle', 'Rice', 'Pizza']
我认为如果做一些宏的事情就会解决,这是我的第一次尝试。
:let new_value = ['Noodle', 'Rice', 'Pizza']
:let i = 0
qq
/$value
:s/$value/\=new_value[i]/
:let i += 1
q
但是当我运行这个宏时,它运行不顺畅。
答案 0 :(得分:4)
您需要在宏中向下移动一行。目前看来,每次都在同一行上运行substitute命令。因此只替换了第一个$value
。 (假设光标在第一行<td>
行开始。)
:let new_value = ['Noodle', 'Rice', 'Pizza']
:let i = 0
qq
/$value
:s/$value/\=new_value[i]/
:let i += 1
jq <-- Added j
如果您按照现有的方式运行宏,则如果所有文本都在一行上,则会正确执行替换。
虽然这是一个更好的解决方案
:let new_value = ['Noodle', 'Rice', 'Pizza']
:%s/$value/\=remove(new_value, 0)/g
第一行创建单词列表,第二行用列表头部替换$value
的所有实例。完成此操作后,new_value
将为空。 (假设new_value的大小等于$value
的数量)