使用 vim-surround 和函数参数

Using vim-surround with argument to a function

我是 vim 环绕声的新手。我想实现以下目标。

我有一个 html 文件,里面有很多图像(* 是光标位置):

<img src="ima*ges/pages/img1.jpg" alt="">

我想用这个来改变它:

<img src="{{ media_url('images/pages/img1.jpg') }}" alt="">

我试过 ys"f 但它没有按预期工作。我想用这种模式更改所有 jpg 图像,我知道 vim-repeat 一旦我可以正确更改第一个,我将深入研究它。

如果您知道对所有 jpg 事件实现此目的的方法,我将非常感激。

非常感谢。

您需要录制一个宏,然后在所有图像上执行。

普通模式下你的光标先定位到"开始用qq录制宏然后:

cs"'va'hSbimedia_urlbvf)S{gvS}gvS"q

现在你已经在q寄存器中录制了一个宏。执行它@q.

将自己定位在下一个图像(") 和@q。您可以将它与find (/"ima) 结合,然后结合n 和@q。

如果您在录制宏时将自己定位为查找下一个单词,您可以在宏前加上数字...10@q 在 10 张图像上执行它....

:substitute 似乎更适合这份工作:

:s#\v<img src="\zs\S{-}\.jpg\ze"#{{ media_url('') }}#g

如果不想全部改,在g后面加上c,在每一个包围之前征求用户同意。

就个人而言,我非常喜欢定制环境。

自定义环境示例,将以下内容添加到 ~/.vim/after/ftplugin/html.vim

let b:surround_{char2nr('m')} = "{{ media_url('\r') }}"

现在在带有 htmlFileType 的文件中,您可以使用 m 周围。最好有 2 个环境,一个用于花括号,一个用于 media_url 函数。

有关详细信息,请参阅 :h surround-customizing