VIM:如何将搜索/替换命令添加到vimrc并映射到快捷键

7

我经常在vim中运行两个搜索/替换命令来清理html代码,以便我可以将其复制/粘贴到网上。这两个命令是:

:%s!<!\&lt;!g
:%s!>!\&gt;!g

我希望有一种方法可以将这两个命令映射在一起...我搜索了如何在vimrc中使用:map命令,但是我不知道如何将这两行合并为一个单独的命令,并且只需按下一个按键(或一系列按键)即可运行。

谢谢!

5个回答

12

您可以将命令放在一行上,用竖线分隔。

:%s!<!\&lt;!g|%s!>!\&gt;!g

但是你需要在 map 命令中对其进行转义

:map <F3> :%s!<!\&lt;!g\|:%s!>!\&gt;!g<CR>

1
这几乎是正确的。在 Vim 中,如果第一个命令没有找到匹配项,则不会执行第二个命令(这将导致第一个命令出错)。为了抑制这种行为,请添加“e”标志,如下所示::map <F3> :%s!<!\&lt;!ge\|:%s!>!\&gt;!ge<CR> - pjb

3
:TOhtml
会创建一个新的缓冲区,其中包含您之前的缓冲区的 HTML 版本,包括实体转义(如果启用了语法高亮,则还包括语法高亮)。有关更多信息,请参见:h TOhtml

2
如果您正在使用此搜索/替换模式对HTML实体进行编码,您可能需要查看unimpaired插件。除其他功能外,该插件还提供了快捷键用于编码和解码XML、URL和C字符串。请注意保留HTML标签。

1
:map <F3> :%s!<!\&lt;!<cr>:%s!>!\&gt;!<cr>    

当然,可以用任何你想要的键来替换它


如果我连续有几个...例如:>>>,这种方法就不起作用了。它只会替换第一个然后移到下一行。 - thornomad
1
这只是因为缺少了 'g' 修饰符。 - nickd
啊,抱歉,我太习惯在我的 .vimrc 中设置 set gdefault 了。 - Matteo Riva

0

我没有尝试过,但是你不能把它们放在同一行上,用"<CR>"分隔吗?


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