【问题标题】:Does anyone know of a vim plugin or script to convert special characters to their corresponding HTML entities?有谁知道将特殊字符转换为相应 HTML 实体的 vim 插件或脚本?
【发布时间】:2015-07-01 10:31:56
【问题描述】:

我为企业客户开发网站,所以我们经常看到 ®、™ 等字符。有时我会粘贴大量的副本,其中甚至可能包含漂亮的引号 (“ ”) 或来自文字处理器的其他奇怪字符。

所以,我的问题是:有谁知道一个 vim 插件或脚本可以一举将所有这些字符转换为 html 实体?

我认为这涵盖了最好拥有的实体的所有基础: http://web.forret.com/tools/charmap.asp

因此,对于上面的字符,它们将被替换为®™“” 等。

我尝试了 htmlspecialchars vimball (http://www.vim.org/scripts/script.php?script_id=2377),但没有骰子。它只像 PHP htmlsepcialchars 函数那样执行它的替换,替换 html 冲突字符,并且不覆盖任何额外的特殊字符。

【问题讨论】:

  • 您为什么要这样做? HTML 实体有点被弃用。当前的 HTML 4 和 5 支持将扩展的 Unicode 字符直接插入到文档正文中,而 XHTML 和 XML 已经放弃了对这些实体的支持(只保留了 5 个基本的 XML 实体)。只需使用 DOCTYPE 和指定的字符集创建正确的 HTML,使用正确的字符集提供文件,您将不需要任何 HTML 实体。
  • 好点。我有点怀疑这是否全面有效,所以我在虚拟机中的不同浏览器上做了一些测试,如果文档具有有效的 DOCTYPE 和字符集,似乎所有现代浏览器都完全支持。非常感谢。我从来没有意识到这不是问题。你刚刚为我节省了大量时间。

标签: vim


【解决方案1】:

我会推荐 Tim Pope 的 unimpaired 插件。它提供commands to encode and decode html entities,分别使用映射:[x]x

【讨论】:

  • 这个插件太好用了,推荐!
【解决方案2】:

Perl 更适合这类事情。将文件粘贴到 vim 中并运行:

:%!perl -p -i -e 'BEGIN { use Encode; } $_=Encode::decode_utf8($_) unless Encode::is_utf8($_); $_=Encode::encode("ascii", $_, Encode::FB_HTMLCREF);'

甚至更好:

%!perl -p -i -e 'BEGIN { use HTML::Entities; use Encode; } $_=Encode::decode_utf8($_) unless Encode::is_utf8($_); $_=Encode::encode("ascii", $_, sub{HTML::Entities::encode_entities(chr shift)});'

(HTML::Entities 是我系统上 HTML::Parser 的一部分)

【讨论】:

    【解决方案3】:

    您可以将其作为宏来执行,在您的 .vimrc 中执行类似这样的操作(我会让您填写其余的实体;-)):

    let @a=':%s/á/\á/g^M:%s/é/\é/g^M:%s/í/\í/g^M ... '
    

    请注意,^M 是使用 Ctrl+VCtrl+M 输入的特殊字符。

    【讨论】:

      【解决方案4】:

      Vim 不能做到这一点,而且没有插件(甚至 unimpaired.vim)可以转换所有 HTML 实体,我和你一样感到惊讶。

      So I made a plugin!

      用法:在正常模式下,]he<motion> 将包含在动作中的字符转换为其正确的 HTML 实体。将转换(几乎所有)字符。

      【讨论】:

        猜你喜欢
        • 2017-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-26
        相关资源
        最近更新 更多