如何在Emacs中隐藏额外信息

时间:2012-07-21 13:51:20

标签: emacs

我想打开一个XML文件,并在Emacs中以特殊方式处理它。 (假设是一种主要模式,可以自定义打开XML文件并对其进行处理并以特殊方式呈现) 我想要做的是在XML中隐藏额外的标记标记,并向用户显示内容。任何人都可以建议我应该怎么做?

`<name id=22> Luke </name>` 

=&GT;我只想要“卢克”出现。

3 个答案:

答案 0 :(得分:4)

执行此操作的一种方法是使用正则表达式从XML中提取元素信息,然后打开一个临时缓冲区以供查看,以便粘贴该元素信息。我不确定缩小是否足够精细以隐藏标记并仅显示元素信息。

话虽如此,临时缓冲方法的替代方法是提取元素信息,将其粘贴到文件的底部,然后缩小到文件的那一部分,以便源标记不可见。 / p>

以下功能与我的想法大致相同:

(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  
    )  
  )

答案 1 :(得分:2)

逻辑步骤将是 - 计算变量中的起始缓冲区结束位置(point-max)和sav - 循环遍历XML,收集实体信息并在保存位置后粘贴它 - 完成呼叫时(窄到区域原点 - 最大值(点 - 最大值))。这将隐藏所有XML,以便只显示您的实体文本。

答案 2 :(得分:1)

M-x sgml-hide-tags RET

参见菜单SGML部分查看更多相关命令