【问题标题】:Using vim-surround with argument to a function将 vim-surround 与函数的参数一起使用
【发布时间】:2015-12-07 19:33:28
【问题描述】:

我是 vim-surround 的新手。我想实现以下目标。

我有一个包含许多图像的 html 文件(* 是光标位置):

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

我想用这个来改变它:

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

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

如果您知道一种方法来实现所有 jpg 的出现,我将非常感激。

非常感谢。

【问题讨论】:

    标签: vim repeat vim-plugin surround


    【解决方案1】:

    就我个人而言,我是自定义环境的忠实粉丝。

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

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

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

    欲了解更多信息,请参阅:h surround-customizing

    【讨论】:

      【解决方案2】:

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

      在正常模式下,首先将光标放在“开始用qq录制宏然后:

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

      现在您已经在 q 寄存器中记录了一个宏。用@q 执行它。

      将你自己定位在下一张图片(“)和@q。你可以将它与find(/“ima)结合起来,然后结合n和@q。

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

      【讨论】:

      • 感谢您的回答!我正在用一个项目尝试您的解决方案以了解它是如何工作的,但是当我到达下划线时,似乎出了点问题。当我输入 cs"'va'hSb 时,我得到 ,但是当我开始输入 media_ 时,我一点击 _,就会得到到行首。
      • 抱歉,缺少 i 用于在媒体之前插入。我是从头开始写这个的,因为我无法在此处粘贴 q 寄存器内容,大多数特殊字符都会被吃掉。
      • 谢谢,现在我遇到了类似的问题,但要退出插入模式并返回环绕命令。在我输入 i 后,vim 进入插入模式,但是我如何告诉 vim 这实际上是环绕命令的一部分?也许命令必须分成两部分?我很理解第一部分cs"'va'h,而不是其余部分。
      • 这就是我告诉你必须录制宏的原因。你可以在这里阅读更多关于它们的信息vim.wikia.com/wiki/Macros
      【解决方案3】:

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

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

      如果您不想全部更改,请在g 之后添加c,以在每个环绕之前征求用户同意。

      【讨论】:

      • 感谢您的回答!我得到"Pattern not found: \v&lt;img src="\zs\S{-}\.jpg\ze"
      猜你喜欢
      • 2021-04-18
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多