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/

相关文章:

vim - 如何以交互方式隐藏当前行的下 n 行

powershell - system() 在 vi​​m 中使用 powershell

linux - 如何保存并退出 Vim?

vim - 如何防止在 Vim 中遍历跳转列表时离开当前缓冲区?

javascript - 在用 jQuery 替换时可以忽略字符串中的 HTML 吗?

vim - 使用 vim 作为编辑器,而使用 emacs 作为代码格式化程序

javascript - 我可以在浏览器中隐藏特定字符 (,) 吗?

regex - Powershell正则表达式组替换

javascript - 将多个 <br> 替换为一个 <br>

c# - 用正则表达式替换文件 c# 中的字符串