2013-05-10 97 views
-1

所以我碰到this如何轻松勾画文本中的任意(数据)结构?

mysite/ 
    manage.py 
    mysite/ 
     __init__.py 
     settings.py 
     urls.py 
     wsgi.py 

this

root --+---> child1 
     +---> child2 --+--> subchild1 
     |    +--> subchild2 
     +---> child3 

,并想知道什么工具(编辑软件包/捆绑等)不以轻松勾勒和编辑这种结构一个使用/编程。

PS:我偏好使用emacs,但为了完整起见,如果其他编辑器/工具包含在答案中,我将不胜感激。

回答

2

第二个例子显然更复杂,我不打算解决它,但大纲模式/次要模式将很好地适用于基于缩进的树,所以这里有一个方法,大纲标题基于任意重复的前缀字符串(在本例中为四个空格,但可根据需要进行配置)。

如果加载/评估下面的代码,然后加载数据文件(包括局部变量),那么你可以隐藏/显示分行与SHIFT + TAB和升级/降级分支机构,SHIFT +左键(光标键)SHIFT + RIGHT。当然,所有其他outline-minor-mode功能也可用。

mysite/ 
    manage.py 
    mysite/ 
     __init__.py 
     settings.py 
      urls.py 
     wsgi.py 

;;; Local Variables: 
;;; my-outline-prefix: " " 
;;; eval: (my-outline-minor-mode 1) 
;;; End: 
(global-set-key (kbd "<S-tab>") 'outline-toggle-children) 
(global-set-key (kbd "<S-left>") 'outline-promote) 
(global-set-key (kbd "<S-right>") 'outline-demote) 

(defvar my-outline-prefix " " 
    "Prefix string denoting a single outline level for `my-outline-minor-mode'.") 

(defvar my-outline-max-level 20 
    "Maximum number of levels for `my-outline-minor-mode'.") 

(define-minor-mode my-outline-minor-mode 
    "Outline levels based on repetitions of `my-outline-prefix'." 
    0 nil nil 
    (outline-minor-mode 1) 
    (setq-local outline-level 'my-outline-level) 
    (setq-local outline-regexp (format "\\(%s\\)*" 
            (regexp-quote my-outline-prefix))) 
    (setq outline-heading-alist '()) 
    (let ((level 0) 
     (level-prefix "")) 
    (while (< level my-outline-max-level) 
     (setq outline-heading-alist (cons (cons level-prefix level) 
             outline-heading-alist) 
      level (1+ level) 
      level-prefix (concat level-prefix my-outline-prefix))) 
    (setq outline-heading-alist (nreverse outline-heading-alist)))) 

(defun my-outline-level() 
    "Counts how many times `my-outline-prefix' appears at the start of the line." 
    (let* ((data (match-data)) 
     (start (car data)) 
     (end (cadr data)) 
     (indent (- end start))) 
    (/ indent (length my-outline-prefix)))) 
+0

能否请您阐述“随着本地变量包括”?......任何其他文字或暗示的第二个例子? – 2013-05-11 14:44:15

+0

使用数据文件中包含的局部变量列表,如我在答案中所示。请参阅'C-h i(emacs)文件变量RET'。但是,由于我已将缩进值默认为四个空格,因此您也可以加载数据文件并在此实例中输入“M-x my-outline-minor-mode”。 – phils 2013-05-11 23:19:01

+0

*可能*大纲模式仍然可以在第二个例子中工作,但我怀疑只用于展开和折叠现有的结构。其他人可能有更好的主意。 – phils 2013-05-11 23:27:53

0

至于第二个例子中,使用Emacs你可以从节点跳到使用 M-X搜索前进,正则表达式RET \(-*\)\(\+\)\(-+>\)

不是使用像节点窄到区域。除了缩小Emacs提供的命令来隐藏东西。

根据这个节点检测一些口齿不清,您可以在发现数据列表读取等

+0

你会注意到尾部的连字号在数量上有所不同,所以它会更像' - * \ + - +>'。当然,谁知道这是否是实际产生的输出,或者是某人用于紧凑树表示的ascii艺术。 – phils 2013-05-13 07:04:46

+0

@phils对,谢谢!我会纠正答案。 – 2013-05-14 08:02:02

相关问题