如何在Emacs中隐藏额外信息
我想打开一个XML文件,并在Emacs中以特殊的方式处理它。(比方说一个主要模式,它是定制的,用于打开XML文件并对其进行处理,然后以特殊的方式呈现) 我想做的是在XML中隐藏额外的标记标记,并只向用户显示内容。谁能告诉我该怎么做如何在Emacs中隐藏额外信息,emacs,Emacs,我想打开一个XML文件,并在Emacs中以特殊的方式处理它。(比方说一个主要模式,它是定制的,用于打开XML文件并对其进行处理,然后以特殊的方式呈现) 我想做的是在XML中隐藏额外的标记标记,并只向用户显示内容。谁能告诉我该怎么做 `<name id=22> Luke </name>` 卢克 =>我只想给大家看《卢克》 一种方法是使用正则表达式从XML中提取元素信息,然后打开一个临时缓冲区以查看粘贴到其中的元素信息。我不确定窄化是否足够细粒度来隐藏标记并只显示元素信
`<name id=22> Luke </name>`
卢克
=>我只想给大家看《卢克》 一种方法是使用正则表达式从XML中提取元素信息,然后打开一个临时缓冲区以查看粘贴到其中的元素信息。我不确定窄化是否足够细粒度来隐藏标记并只显示元素信息 话虽如此,临时缓冲区方法的替代方法是提取元素信息,将其粘贴到文件的底部,然后缩小到文件的该部分,以便源标记不可见 下面的函数与我的想法大致相同:
(defun show-xml-entities ()
(interactive)
(save-excursion
(let ((old-max (point-max))) ;; save current end of buffer
(goto-char (point-min)) ;; go to beginning of buffer
(while (re-search-forward ">\\([^<>]+\\)<" nil t) ;; search for elements until not found
(when (> (length (match-string-no-properties 1)) 0) ;; if match is non-zero length
(setq temp (point-marker)) ;; save end of match
(goto-char (point-max)) ;; go to end of buffer
;; paste current match to end of buffer
(insert (concat (buffer-substring-no-properties (match-beginning 1) (match-end 1))))
(goto-char (marker-position temp)) ;; return to end of current match
)
)
(narrow-to-region old-max (point-max))) ;; narrow to newly pasted element text
)
)
(定义显示xml实体()
(互动)
(省去远足
(让((旧最大值(点最大值));;保存缓冲区的当前结尾
(转到字符(最小点));转到缓冲区的开头
(而(向前搜索“>\\([^]+\\)逻辑步骤将是
-计算var中的起始缓冲区结束位置(最大点)和sav
-循环浏览XML,收集实体信息并将其粘贴到保存的位置之后
-完成后调用(缩小到区域原始点最大值(点最大值))。这将隐藏所有XML,以便只有实体文本可见。M-x sgml隐藏标记RET
有关解决方案的第二部分,请参见菜单SGML部分查看一些更相关的命令,您能给我一些提示吗?一个链接或一些进一步的解释吗?非常感谢临时缓冲区方法的替代方法。我可以使用搜索函数(使用regex)提取元素,然后如何执行其余操作?(将它们放在文件的底部并缩小…)你能把解决方案放在答案中吗?谢谢,我不应该把保存信息的变量放在这个缩小的函数中吗?