3

我有一个这样的 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

但是当我运行这个宏时,它运行不顺畅。

4

1 回答 1

4

您需要在宏中下移一行。按照目前的情况,您每次都在同一行上运行替换命令。所以只有第一个$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

于 2013-05-24T20:29:21.997 回答