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

Per*_*cot 4 vim

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

Pet*_*ker 6

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

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

要编译刚粘贴的文本:

`[[x`]
Run Code Online (Sandbox Code Playgroud)

说明:

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

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

nmap <leader>x `[[x`]
Run Code Online (Sandbox Code Playgroud)

更多信息:

:h mark-motion
:h `[
Run Code Online (Sandbox Code Playgroud)


Ran*_*ris 5

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


实际上,看了一下后,你根本不需要修改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
Run Code Online (Sandbox Code Playgroud)

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