如何在Emacs中隐藏额外信息

如何在Emacs中隐藏额外信息,emacs,Emacs,我想打开一个XML文件,并在Emacs中以特殊的方式处理它。(比方说一个主要模式,它是定制的,用于打开XML文件并对其进行处理,然后以特殊的方式呈现) 我想做的是在XML中隐藏额外的标记标记,并只向用户显示内容。谁能告诉我该怎么做 `<name id=22> Luke </name>` 卢克 =>我只想给大家看《卢克》 一种方法是使用正则表达式从XML中提取元素信息,然后打开一个临时缓冲区以查看粘贴到其中的元素信息。我不确定窄化是否足够细粒度来隐藏标记并只显示元素信

我想打开一个XML文件,并在Emacs中以特殊的方式处理它。(比方说一个主要模式,它是定制的,用于打开XML文件并对其进行处理,然后以特殊的方式呈现) 我想做的是在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)提取元素,然后如何执行其余操作?(将它们放在文件的底部并缩小…)你能把解决方案放在答案中吗?谢谢,我不应该把保存信息的变量放在这个缩小的函数中吗?