vim - 用数组列表替换匹配的模式

标签 vim replace

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

相关文章:

linux - 如何更改目录中所有文件中所有出现的单词

python - 如何仅将 dtype bool 列的 Pandas 数据框中的 True 和 False 映射到 'Yes' 和 'No'?

excel - 查找并替换公式中的文本

vim - 在 Vim 中突出显示光标下的变量,就像在 NetBeans 中一样

java - 将字符替换为点

vim - vim 中可以使用多个文件夹标记吗?

python - 在调试并刚刚完成时,如何避免在 python 开源应用程序中留下调试器 print/pdb 语句?

git - 如何使用 Mercurial 为文件执行 "replace with the latest from head"?

vim - 保存 vimdiff 输出?

vim - 在 Vim 中,如何为代码块进行可视行选择?