在vim中如何使用<code>标签包围两个单词,以便可以使用点运算符重复该操作?

10

我正在使用 vim-surround 插件处理以下 HTML 代码(其中 * 表示我的光标位置):

<li class="sample" style="border-color: #005462;">*#005462</li>

我想用 <code> 将 #005462 包围起来,使其看起来像这样:<code>#005462</code>。 我可以通过可视模式完成此操作,但希望能够使用点操作符重复执行该操作。 有什么建议吗?


4
我通常使用宏来做那种事情。 - Tom Wadley
4个回答

9
您想要安装repeat.vim插件,该插件可以为其他几个插件添加.支持,包括surround插件。

1
在处理这个问题时,surround.vim和repeat.vim的联合使用绝对是最好的通用解决方案。 - sleepynate
由于他必须使用可视模式来选择文本,所以 repeat.vim 在这种特定情况下无法帮助。有关其余细节,请参见我的答案 - Nick Knowlson

7

从正常模式尝试录制宏。然后:

qai<code><esc>ea</code><esc>q
  1. 这个命令会在 a 中开始录制 (q)。
  2. 进入插入模式 (i)。
  3. 输入 <code>。
  4. 返回正常模式 (<esc>)。
  5. 移动到单词末尾 (e)。
  6. 再次进入插入模式 (a)。
  7. 输入 </code>。
  8. 返回正常模式 (<esc>)。
  9. 停止录制 (q)。

之后,您可以使用 @a 或 @@ 重复此命令以重复上次使用的命令。当调用 a 时,请确保您处于正确的位置,否则您将无法获得预期的结果。


2

有几个其他人遇到了使用surround.vim重复操作的问题:

在第一个链接中,引用了surround.vim文档中意味着可视模式环绕不起作用的一句话:

如果你安装了repeat.vim,则“. ”命令将与ds、cs和yss一起工作

考虑到周围的文本元素,我不认为有一种方法可以只环绕#005462而不使用可视模式。

因此,针对这个特定问题, 我认为快速且可重复的搜索和替换是您最好的选择。

:s/: \(#......\);/: <code>\1<\/code>;/g

转到正确的行,进入命令行模式并键入或粘贴此内容,然后按Enter键。

移动到下一行,按&重复上一条命令。

如果您知道想要在文件中替换所有内容,则可以在s/命令前添加%,如下所示:

:%s/: \(#......\);/: <code>\1<\/code>;/g

希望这能帮到你!


0

看一下这个Vimcasts.org上关于将haml转换成erb的视频。你可以使用相同的技巧来完成你的任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接