有没有简单的方法把重音符号和特殊字符编码成html或十六进制的?关于Vim原文阿希希到html:áh hí híhex:\xE1h h h\xEDh\xED
ergxz8rk1#
对于HTML编码,这取决于你想要的彻底程度。一种方法是使用Perl模块HTML::Entities。它是彻底和快速,但相当沉重:
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对它们进行解码。它们应用于整个文件或一系列标记行。
shstlldc2#
下面是将这些非ascii字符转换为HEX值一种方法:
%s/[^\x00-\x7f]/\=printf('\x%x',char2nr(submatch(0)))/g
以您的行为例,该命令将其更改为:
\xe1h h\xedh\xed
bis0qfac3#
在这里发布太长了-本质上是一系列永无止境的替换-并且可能会更聪明,但我的第一个vimscript函数擅长它所做的事情:将常规字符替换为相应的HTML实体。向下滚动可找到另一个执行相反操作的功能。
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:
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)和编码/解码,只有标签内容。
vit
4条答案
按热度按时间ergxz8rk1#
对于HTML编码,这取决于你想要的彻底程度。一种方法是使用Perl模块
HTML::Entities
。它是彻底和快速,但相当沉重:前两个Map对HTML实体进行编码,后一个Map对它们进行解码。它们应用于整个文件或一系列标记行。
shstlldc2#
下面是将这些非ascii字符转换为HEX值一种方法:
以您的行为例,该命令将其更改为:
bis0qfac3#
在这里发布太长了-本质上是一系列永无止境的替换-并且可能会更聪明,但我的第一个vimscript函数擅长它所做的事情:将常规字符替换为相应的HTML实体。
向下滚动可找到另一个执行相反操作的功能。
7gs2gvoe4#
在可视模式下,替换始终扩展到整行。为了解决这个问题,我使用了:
或者使用AstroNvim格式,格式为
mappings.lua
:所以你可以选择(
vit
)和编码/解码,只有标签内容。