Python-ModeとEmacsのOrg-Modeを組み合わせます
質問
ORG-ModeとLISP-Modeを組み合わせて、LISPコード用のEMACSで美しいコード折りたたみを実現しました。 lisp-orgi-mode。基本的に、私は ';'を使用します見出し文字として「*」の代わりに。コメントのために、私は ';'の前にスペースを置いて、それを作ります。だから、それは見出しとしてカウントされません...
ただし、Python-Modeで同じことをすることは機能しません...おそらく、Pythonコメントで使用される「#」文字がOrg-Modeの設定に干渉するためです...
誰もが機能を正常に組み合わせることができましたか?私は人々がPython-Modeとアウトラインモードを組み合わせたことを知っています(リンク)、しかし、Ouline-Modeはorg-Modeほど良くありません...
編集:うまく機能しました アウトラインマジック: :python-magic.el
解決
私が使う Hideshow-Org (そしてここで小さな紹介)この目的のために、そして私はそれが本当に、本当にうまくいくと思います。
これらはいくつかの追加ですが、便利なスニペットです。
(dolist (hook (list 'c-mode-common-hook
'emacs-lisp-mode-hook
'java-mode-hook
'lisp-mode-hook
'perl-mode-hook
'sh-mode-hook))
(add-hook hook 'my-hideshow-hook))
(defun my-hideshow-hook ()
"thisandthat."
(interactive)
(progn (require 'hideshow-org)
(global-set-key (kbd "C-c h") 'hs-org/minor-mode)
(hs-org/minor-mode)))
(defadvice goto-line (after expand-after-goto-line activate compile)
"hideshow-expand affected block when using goto-line in a collapsed buffer"
(save-excursion
(hs-show-block)))
他のヒント
わかりました、次のアウトラインregexpでアウトラインマイナーモードがうまく動作しました: [ t]*# | [ t]+(class | def | if | elif | else | | for | try |を除く |を除く |を除く) "これで、Python構文とコメント行の両方を見出しとして使用してコード折りたたみを取得します。
タブを使用するためにコードを適応させることは可能ですか?
python-magic.el:
; require outline-magic.el by CarstenDominik found here: ; http://www.astro.uva.nl/~dominik/Tools/outline-magic.el ; modified code here by Nikwin slightly found here: ; http://stackoverflow.com/questions/1085170/how-to-achieve-code-folding-effects-in-emacs/1085551#1085551 (add-hook 'outline-minor-mode-hook (lambda () (require 'outline-magic) )) (add-hook 'python-mode-hook 'my-python-outline-hook) (defun py-outline-level () (let (buffer-invisibility-spec) (save-excursion (skip-chars-forward " ") (current-column)))) (defun my-python-outline-hook () (setq outline-regexp "[ \t]*# \\|[ \t]+\\(class\\|def\\|if\\|elif\\|else\\|while\\|for\\|try\\|except\\|with\\) ") (setq outline-level 'py-outline-level) (outline-minor-mode t) (hide-body) (show-paren-mode 1) (define-key python-mode-map [tab] 'outline-cycle) (define-key outline-minor-mode-map [S-tab] 'indent-for-tab-command) (define-key outline-minor-mode-map [M-down] 'outline-move-subtree-down) (define-key outline-minor-mode-map [M-up] 'outline-move-subtree-up) ) (provide 'python-magic)
おもう outline-magic
に取って代わられました outshine
, 、そして、上記のコードがそれで動作するかどうかはわかりません。しかし、私は次のコードを機能させることができました、 ライアン・デイビスによるブログ投稿:
(defun python-mode-outline-hook ()
(setq outline-level 'python-outline-level)
(setq outline-regexp
(rx (or
;; Commented outline heading
(group
(* space) ; 0 or more spaces
(one-or-more (syntax comment-start))
(one-or-more space)
;; Heading level
(group (repeat 1 8 "\*")) ; Outline stars
(one-or-more space))
;; Python keyword heading
(group
;; Heading level
(group (* space)) ; 0 or more spaces
bow
;; Keywords
(or "class" "def" "else" "elif" "except" "for" "if" "try" "while")
eow)))))
(defun python-outline-level ()
(or
;; Commented outline heading
(and (string-match (rx
(* space)
(one-or-more (syntax comment-start))
(one-or-more space)
(group (one-or-more "\*"))
(one-or-more space))
(match-string 0))
(- (match-end 0) (match-beginning 0)))
;; Python keyword heading, set by number of indentions
;; Add 8 (the highest standard outline level) to every Python keyword heading
(+ 8 (- (match-end 0) (match-beginning 0)))))
(add-hook 'python-mode-hook 'python-mode-outline-hook)
たぶん誰かがこれを役に立つと思うでしょう。コードの編集とナビゲートを簡単にする素晴らしい方法だと思います。