繁体   English   中英

是否有针对vim的HTML转义粘贴模式?

[英]Is there an HTML escape paste mode for vim?

我正在使用vim来维护我一天所做的博客(我用来生成输出的命令等等),有时我需要复制粘贴其中包含特殊html字符的字符串。 有没有办法制作一个“html-paste”模式,以便(例如)将<转换为&lt;?

对于简单的XML编码,我使用Tim Pope的unimpaired.vim

  • [x后面是一个动议
  • 然后在视觉上选择文本[x
  • [xx编码当前行

要编译刚粘贴的文本:

`[[x`]

说明:

  • `[`]是由变化或猛拉的边界设定的标记。 `[在开头和`]在结尾。
  • 首先使用`[移动到刚刚粘贴的文本的开头
  • 接下来执行[x来编码以下动作
  • 通过使用`] ,动作将是当前光标位置到粘贴文本末尾之间的所有文本。

您可以选择将其包装到映射中

nmap <leader>x `[[x`]

更多信息:

:h mark-motion
:h `[

如果有人想要修改它们以接受范围,那么这里有一些小函数,然后提供一个映射,通过[]标记来处理最后粘贴的文本。


实际上,看了一下后,你根本不需要修改vim提示中的功能。 如果函数未显式传递range选项,则对给定范围的每一行调用该函数一次。 这意味着您需要做的就是使用范围调用该函数。

下面是几个有用的例子。 第一个为最后粘贴的文本中的每一行调用HtmlEscape(),第二个调用相同但对于视觉选择的块中的每一行。 将其添加到.vimrc

nnoremap <Leader>h :'[,']call HtmlEscape()<CR>
vnoremap <Leader>h :call HtmlEscape()<CR>

function HtmlEscape()
  silent s/&/\&amp;/eg
  silent s/</\&lt;/eg
  silent s/>/\&gt;/eg
endfunction

显然,如果你想要更换更多东西,你必须添加它们; 链接的维基页面上有很多。

您可以使用将转换寄存器值的映射然后粘贴它:

python import xmlrpclib, vim
function! EscapeHTML(str)
    try " Force any error to be an exception "
        let d={}
        python vim.eval("extend(d, {'xml': '"+xmlrpclib.escape(vim.eval("a:str")).replace("'", "''")+"'})")
        return d.xml
    endtry
endfunction
function! s:PasteHTML()
    return "\"=EscapeHTML(getreg(".string(v:register)."))\np"
endfunction
nnoremap <expr> ,p <SID>PasteHTML()

需要vim并支持python和python。 xmlrpclib包附带python。 如果你不想要python,请替换EscapeHTML函数。 使用此脚本,p除了转换输入外,p将像p一样工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM