xml - VIM:编写整个 CDATA 部分的选择脚本

标签 xml vim cdata

我正在尝试使用 VIM 选择整个 XML CDATA 部分。对于不熟悉 XML 的人来说,CDATA 部分如下所示:

<someTag><![CDATA[
This text is escaped in a Character Data section!
Look, I can use < and > characters freely!
]]></someTag>

<anotherTag><![CDATA[More escaped text!]]></anotherTag>

我尝试使用此映射来直观地选择并拉出 CDATA 部分内的文本,但调用函数似乎禁用了视觉选择:

inoremap <F9> <Esc>:call searchpair('<!\[CDATA\[', '', ']]>', 'b')v:call searchpair('<!\[CDATA\[', '', ']]>')y

有什么方法可以选择整个 CDATA 部分吗?这是我在C语言中选择方法时使用的,供引用:

inoremap <F7> <Esc><C-V>aBy

谢谢。

最佳答案

这个固定版本适合我

 :inoremap <F9> <Esc>:call searchpair('<!\[CDATA\[', '', ']]>', 'b')<CR>
      v:<C-u>call searchpair('<!\[CDATA\[', '', ']]>')<CR>v`<o

(现实生活中没有换行)

技巧:

  • <CR>对于必要的Enter
  • <C-u>清除命令行上的范围
  • v`重新选择到视觉选择的开始
  • o将光标移动到视觉选择的末尾

我很惊讶这将是插入模式映射,我假设您也有正常模式映射。

顺便说一句,也许您会对 operator pending 感兴趣“正确的”文本对象语义的模式映射:

编辑更新以回复评论:

以下内容似乎有效(在搜索模式中明智地使用\zs\ze)。您可能想要回溯一个位置(将 <BS> 添加到映射末尾)。另外,到目前为止,operator-pending类型映射似乎变得更有吸引力。

:inoremap <F9> <Esc>:call searchpair('<!\[CDATA\[\zs', '', '\ze]]>', 'b')<CR>
    v:<C-u>call searchpair('<!\[CDATA\[\zs', '', '\ze]]>')<CR>v`<o

PS:您可能还想在搜索模式中应用显式的魔法级别(例如 \V )

关于xml - VIM:编写整个 CDATA 部分的选择脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9873459/

相关文章:

xml - 与元素类型 "{1}"关联的属性 "value"需要打开引号

git - 鼠标选项在 Git-Bash Windows 上的 Vim 中不起作用

vim - 资源管理器 : is it installed by default?

xml - 在另一个 CDATA 中使用 CDATA

php - SimpleXML——剥离 CDATA 标签(或在 XML 中嵌入 HTML 标记)

xml - XSLT 映射算法

php - XML - 创建元素 - 换行

Java SAX 解析器,如何完全防止字符引用? (DoS 攻击)

python - 在 vimscript 中使用 Python : How to export a value from a python script back to vim?

iphone - xml文件的CDATA中的下标和上标。使用UILabel显示已解析的XML内容