如何在非连续行上运行命令行命令,指定单独的行号?

时间:2012-11-08 12:00:06

标签: vim

例如,假设我想在第1,3,11和15行用foo替换bar。我怎么能这样做?

:1,15s/foo/bar

将在第1-15行用foo替换bar。但我想指定多个单独的行(1,3,11,15),而不是范围(1-15)。

2 个答案:

答案 0 :(得分:6)

一种方法:对第一行执行:substitute,然后在以下行中使用:&&重复相同的替换。

:execute '1s/foo/bar' | 5&& | 11&& | 15&&

另一种方法:使用:global命令,其模式仅与行匹配。

:g/\%1l\|\%5l\|\%11l\|\%15l/s/foo/bar

第三种方式:使用循环:

:for l in [1,5,11,15] | execute l.'s/foo/bar' | endfor

答案 1 :(得分:1)

你如何提出行号?如果这是一个手动视觉检查过程,您可以使用multiselect plugin。它允许您选择多个非连续范围,然后您可以对它们应用命令:

:MSExecCmd s/foo/bar