vim将文本编码为html和hex(用于javascript)

wnrlj8wa  于 2023-05-07  发布在  Java
关注(0)|答案(4)|浏览(120)

有没有简单的方法把重音符号和特殊字符编码成html或十六进制的?关于Vim
原文
阿希希
到html:
áh hí hí
hex:
\xE1h h h\xEDh\xED

ergxz8rk

ergxz8rk1#

对于HTML编码,这取决于你想要的彻底程度。一种方法是使用Perl模块HTML::Entities。它是彻底和快速,但相当沉重:

nnoremap <silent> <Leader>h :silent %!perl -CIO -MHTML::Entities -pe '$_=encode_entities $_'<CR>
vnoremap <silent> <Leader>h :<C-u>silent '<,'>!perl -CIO -MHTML::Entities -pe '$_=encode_entities $_'<CR>
nnoremap <silent> <Leader>H :silent %!perl -CI  -MHTML::Entities -pe '$_=decode_entities $_'<CR>
vnoremap <silent> <Leader>H :<C-u>silent '<,'>!perl -CI  -MHTML::Entities -pe '$_=decode_entities $_'<CR>

前两个Map对HTML实体进行编码,后一个Map对它们进行解码。它们应用于整个文件或一系列标记行。

shstlldc

shstlldc2#

下面是将这些非ascii字符转换为HEX值一种方法:

%s/[^\x00-\x7f]/\=printf('\x%x',char2nr(submatch(0)))/g

以您的行为例,该命令将其更改为:

\xe1h h\xedh\xed
bis0qfac

bis0qfac3#

在这里发布太长了-本质上是一系列永无止境的替换-并且可能会更聪明,但我的第一个vimscript函数擅长它所做的事情:将常规字符替换为相应的HTML实体。
向下滚动可找到另一个执行相反操作的功能。

7gs2gvoe

7gs2gvoe4#

在可视模式下,替换始终扩展到整行。为了解决这个问题,我使用了:

vnoremap <silent> <Leader>h c<C-R>=system("perl -MHTML::Entities -p -e 'encode_entities($_)'", getreg('"'))<CR>
vnoremap <silent> <Leader>H c<C-R>=system("perl -MHTML::Entities -p -e 'decode_entities($_)'", getreg('"'))<CR>

或者使用AstroNvim格式,格式为mappings.lua

v = {
    ["<Leader>h"] = {
      "c<C-R>=system(\"perl -MHTML::Entities -p -e 'encode_entities($_)'\", getreg('\"'))<CR>",
      desc = "Encode XML/HTML Special Characters",
    },
    ["<Leader>H"] = {
      "c<C-R>=system(\"perl -MHTML::Entities -p -e 'decode_entities($_)'\", getreg('\"'))<CR>",
      desc = "Decode XML/HTML Special Characters",
    },
  },

所以你可以选择(vit)和编码/解码,只有标签内容。

  • 免责声明:我已经使用vim几周了 *

相关问题