我有这样的 HTML 代码。
<tr>
<td>$value</td>
<td>$value</td>
<td>$value</td>
</tr>
我想用数组 new_value = ['Noodle', 'Rice', 'Pizza'] 中的值更改所有
我认为它会是如果做一些宏观的事情就解决了,这是我的第一次尝试。$value
:let new_value = ['Noodle', 'Rice', 'Pizza']
:let i = 0
qq
/$value
:s/$value/\=new_value[i]/
:let i += 1
q
但是当我运行这个宏时,它运行不流畅。
最佳答案
您需要在宏中向下移动一行。按照目前的情况,您每次都在同一行运行 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
的个数)
关于vim - 用数组列表替换匹配的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16743074/