ฉันสามารถใช้โหมดองค์กรเพื่อจัดโครงสร้าง. emacs หรือไฟล์กำหนดค่า. el อื่น ๆ ได้หรือไม่


48

ฉัน.emacsแฟ้มการกำหนดค่าที่ได้รับใหญ่และขนาดใหญ่และฉันต้องการที่จะได้รับภาพรวมที่ดีขึ้นและการก่อสร้างโดยการเพิ่มหัวข้อหัวข้อย่อยและความสามารถในการซ่อนหรือแสดงให้พวกเขาเหมือนที่ผมสามารถทำอะไรกับ org-modeEmacs

ฉันสังเกตเห็นว่าฉันสามารถเปิดใช้งานorg-modeได้ใน.emacsบัฟเฟอร์และเป็นไปได้ที่จะเพิ่มส่วนหัวและยุบพวกเขา แต่ Emacs / Aquamacs จะยังสามารถโหลดรหัส Elisp จากเอกสารได้หรือไม่หากฉันเพิ่มorg-modeส่วนหัว (เช่นบรรทัดที่ขึ้นต้นด้วยเครื่องหมายดอกจันหนึ่งตัวหรือมากกว่า)?

ฉันมีทุกอย่างในไฟล์เดียวหรือฉันต้องมี.*orgไฟล์เดียวแล้วส่งออกรหัส Elisp ไปยังไฟล์อื่นเป็นประจำหรือไม่

คำตอบ:


46

ได้แน่นอนคุณสามารถใช้org-babel-load-fileสิ่งนี้ได้

ในของคุณinit.elให้ใส่สิ่งต่อไปนี้:

(require 'org)
(org-babel-load-file
 (expand-file-name "settings.org"
                   user-emacs-directory))

(ฉันใช้ ~ / .emacs.d / settings.org แต่นั่นเป็นการตั้งค่าส่วนตัว) ในsettings.orgไฟล์คุณสามารถจัดเรียงไฟล์ได้ตามต้องการ

* Turn off menu bar
#+BEGIN_SRC emacs-lisp
(menu-bar-mode -1)
#+END_SRC

เมื่อคุณเริ่มใช้งาน Emacs ระบบจะพิจารณาว่าไฟล์ settings.org มีการเปลี่ยนแปลงโดยอัตโนมัติหรือไม่หากจำเป็นให้ยุ่งเหยิงเพื่อสร้างsettings.elไฟล์ที่จะโหลด


1
คุณจะเปลี่ยนสิ่งนี้อย่างไรในการโหลดข้อมูลล่าสุดorgจาก elpa แทนที่จะเป็นข้อมูลorgที่มีอยู่ใน emacs ที่สะอาด ดูเหมือนว่าpackageรหัสการเริ่มต้นจะต้องถูกดึงออกมาsettings.orgและใส่ลงไปinit.el?
mankoff

3
@mankoff ถูกต้องนี่คือของฉันinit.el: (require 'package) (package-initialize) (setq custom-file "~/.emacs.d/custom.el") (when (file-exists-p custom-file) (load custom-file)) (require 'org) (org-babel-load-file (expand-file-name "settings.org" user-emacs-directory))
Lee H

2
@mankoff ขออภัยสำหรับการจัดรูปแบบที่ไม่ดีผมมีรุ่นที่อ่านได้มากขึ้นใกล้ด้านบนของwritequit.org/org/settings.html
ลี H

2
มีตัวอย่าง Emacs ที่รู้หนังสือมากกว่าสองสามตัว อาจถึงเวลาที่จะเริ่มดัชนี นี่คือตัวอย่างของgithub.com/grettke/home
grettke

1
จำไว้ว่าอย่ากำหนดค่าสิ่งที่เกี่ยวข้องกับองค์กรในไฟล์องค์กรหากคุณต้องการใช้องค์กรรุ่นล่าสุด (9) ที่มีอยู่ใน Melpa ฉันกำลังทำgithub.com/cescoferraro/dotfiles/blob/master/src/emacs.d/
CESCO

23

หากสิ่งที่คุณต้องการคือการเลือกแสดงส่วนและการนำทางระหว่างส่วนหัวคุณไม่จำเป็นต้องใช้โหมดองค์กร ทั้งหมดที่คุณต้องเป็นโหมดโครงร่าง โหมดเค้าร่างนั้นเป็นระดับส่วนหัวและการจัดการการมองเห็นส่วนของโหมดองค์กร ในความเป็นจริงโหมดองค์กรเดิมนามสกุลของผู้เขียนไปยังโหมดเค้าโครงและเติบโตและขยายตัวและเติบโต ... แม้วันนี้ได้มาจากorg-modeoutline-mode

โหมดเค้าร่างมีอยู่ทั้งในโหมดหลักและโหมดรอง โหมดรองสามารถใช้ในโหมดหลักใด ๆ คุณสามารถกำหนดค่าให้ใช้รูปแบบส่วนหัวที่เข้ากันได้กับไวยากรณ์โปรแกรมของคุณและโหมดหลัก ๆ ทำได้โดยตั้งค่าoutline-regexpตัวแปรให้เป็น regexp ที่ตรงกับจุดเริ่มต้นของส่วนหัว ตัวอย่างเช่นนี่เป็นค่าเริ่มต้นในโหมด Emacs Lisp:

";;;\\(;* [^ \t\n]\\|###autoload\\)\\|("

เช่นส่วนหัวเริ่มต้นด้วยอัฒภาคสามตัวขึ้นไปและเว้นวรรคหนึ่งช่องหรือวงเล็บเปิดที่ขอบซ้าย ตัวแปรoutline-levelมีชื่อของฟังก์ชันเพื่อกำหนดความลึกของส่วนหัว; ค่าเริ่มต้นคือความยาวของสตริงจับคู่โดยoutline-regexp, และโหมด Emacs เสียงกระเพื่อมแทนที่มันจะกำหนดความลึกขนาดใหญ่และ(;;;###autoload

ถ้าคุณไม่ชอบรูปแบบส่วนหัวเริ่มต้นตั้งค่าตัวแปรoutline-regexpในไฟล์ประกาศตัวแปรท้องถิ่น นี่คือสิ่งที่ฉันใช้ - ส่วนหัวของฉันทั้งหมดประกอบด้วย;;;ลำดับดาวคลาสสิกตามด้วย:

;;; Local Variables:
;;; outline-regexp: ";;;\\*+\\|\\`"
;;; End:

หากคุณต้องการให้โหมดย่อยเปิดใช้งานโดยอัตโนมัติเมื่อคุณโหลดไฟล์เพิ่มบรรทัดต่อไปนี้ในส่วน Local Variables - โปรดทราบว่าสิ่งนี้จะเตือนคุณเกี่ยวกับรหัสที่ไม่ปลอดภัยใน Emacs ≤23.x

;;; eval: (outline-minor-mode 1)

คำสั่งสำหรับเค้าร่างโหมดรองใช้ส่วนC-c @นำหน้าค่อนข้างไม่สะดวกโดยปริยาย ฉันย้ายไปที่M-o(ฉันไม่เคยใช้การผูก facemenu) คุณอาจต้องการคีย์อื่นหรือทำซ้ำการเชื่อมโยงของโหมด Org (ซึ่งแยกจากโหมด Outline เล็กน้อย)


4
ฉันที่สองนี้ องค์กรนั้นยอดเยี่ยม แต่สำหรับสิ่งนี้สิ่งที่คุณต้องมีก็คือโหมดเค้าร่าง และจะดียิ่งขึ้นหากคุณรวมเข้ากับโหมด outshine, outorg และ navi-mode ด้วย outshine และ outorg คุณไม่จำเป็นต้องใช้ org-babel และการพันกันเป็นไฟล์แยกต่างหากเพื่อรับความคิดเห็นสไตล์โหมด org ที่ดี นี่คือส่วนสำคัญของรหัส elisp ที่ฉันใช้เพื่อทำให้ Python, elisp และ shell code ทำงานได้อย่างดี
blujay

14

การเขียนโปรแกรมความรู้ที่จะนำคุณวิธีที่ส่วนใหญ่มีorg โหมดสนับสนุนผ่านorg-Babel มีคำตอบสองทางที่สามารถอธิบายได้ในบล็อกของ@malabarba :

วิธีที่ง่ายที่สุดคือการโหลดโหมดองค์กรจากนั้นใช้คุณสมบัติที่ไม่ต้องแกะเพื่อโหลดการกำหนดค่า Emacs ที่รู้หนังสือ:

(require 'org)
(org-babel-load-file
 (expand-file-name "emacs-init.org"
                   user-emacs-directory))

อีกทางเลือกหนึ่ง (เพื่อหลีกเลี่ยงการโหลด org ทั้งหมด) การแก้ปัญหาสามารถทำได้ด้วย Primac Lisp ดั้งเดิม:

(defvar endless/init.org-message-depth 3
  "What depth of init.org headers to message at startup.")

(with-temp-buffer
  (insert-file "~/.emacs.d/init.org")
  (goto-char (point-min))
  (search-forward "\n* init.el")
  (while (not (eobp))
    (forward-line 1)
    (cond
     ;; Report Headers
     ((looking-at
       (format "\\*\\{2,%s\\} +.*$"
               endless/init.org-message-depth))
      (message "%s" (match-string 0)))
     ;; Evaluate Code Blocks
     ((looking-at "^#\\+BEGIN_SRC +emacs-lisp.*$")
      (let ((l (match-end 0)))
        (search-forward "\n#+END_SRC")
        (eval-region l (match-beginning 0))))
     ;; Finish on the next level-1 header
     ((looking-at "^\\* ")
      (goto-char (point-max))))))

6

โหวตเพิ่มเติมหนึ่งครั้งสำหรับโหมดเค้าร่าง ตัวอย่างเช่นสำหรับการจัดระเบียบ.emacsฉันใช้ไวยากรณ์ต่อไปนี้:

;;; HEADING:

ในส่วนที่มีความสำคัญ;;;และ:\n

(add-hook 'emacs-lisp-mode-hook 
          (lambda ()
            (make-local-variable 'outline-regexp)
            (setq outline-regexp "^;;; ")
            (make-local-variable 'outline-heading-end-regexp)
            (setq outline-heading-end-regexp ":\n")
            (outline-minor-mode 1)
            ))

นี่คือตัวอย่าง.emacs:

;;; preliminaries:
;; load-path:
;; This little monster adds all non-dot dirs to Your load path recursively
(let* ((my-lisp-dir "~/.emacs.d/site-lisp/")
       (default-directory my-lisp-dir)
       (orig-load-path load-path))
  (setq load-path (cons my-lisp-dir nil))
  (normal-top-level-add-subdirs-to-load-path)
  (nconc load-path orig-load-path))

;; ...

;;; modes:

;; python-mode:
(setq py-install-directory "~/.emacs.d/site-lisp/python-mode")
(add-to-list 'load-path py-install-directory)
(require 'python-mode)

;; ...

;;; customizations:
(custom-set-variables
 '(blink-cursor-mode nil)
)

;; ...

หนึ่งควรเปิดใช้งานoutline-minor-modeและจากนั้นสองจังหวะที่จำเป็นคือ:

  • C-c @ C-t - แสดงโครงสร้างระดับบนสุด

    ข้างต้นกลายเป็น

    ;;; preliminaries:
    ;;; modes:
    ;;; customizations:
    
  • C-c @ C-a - แสดงทั้งหมดอีกครั้ง

การใช้งานทั่วไปคือการแสดงโครงสร้างระดับบนสุดย้ายไปที่หัวข้อที่น่าสนใจและแสดงทั้งหมดอีกครั้ง


1
เราสามารถใช้คำสั่งเหมือนใน org โหมด: เช่น#+STARTUP: overviewหรือshow allหรือcontentsตัวเลือก
ปริญญาเอก

@Doctorate: การสนับสนุนโหมด org สำหรับการพับถูกสร้างขึ้นที่ด้านบนของเค้าร่างโหมด เราไม่สามารถใช้เพียงคำสั่ง: เนื่องจากตรงกันข้ามกับโหมด org - ใน elisp #ไม่ใช่เครื่องหมายความคิดเห็นดังนั้นล่าม Elisp ในตัวของ emacs จะสับสนเมื่อมันมาถึง#+STARTUPหรืออะไรทำนองนี้ (หรือฉันเข้าใจผิดคุณแสดงความคิดเห็น?)
Adobe

ฉันหมายถึงจะมีวิธีการใช้STARTUPคำสั่งภายในorgstruct-modeเช่นนี้เป็นบัฟเฟอร์ R แต่ความคิดเดียวกัน: emacs.stackexchange.com/a/8065/2443
ปริญญาเอก

3

ในคำตอบ SO ต่อไปนี้คุณจะเห็นวิธีการทำตัวอย่างโครงการที่ใช้ไฟล์ org เดียวหรือหลายไฟล์ข้อดีของการใช้ Cask และลิงก์ไปยังเอกสารประกอบคืออะไร

https://stackoverflow.com/questions/25430029/whats-the-best-way-to-package-my-emacs-installation-packages-and-config-so-tha/25430745#25430745

ฉันเปลี่ยนการตั้งค่าของฉันเป็น org เมื่อไม่กี่เดือนที่ผ่านมาและฉันก็ไม่พอใจกับมันโดยสิ้นเชิง มันต้องการการกำหนดค่าและการอ่านคู่มือ org เพื่อให้มีไฟล์ org ที่มีประโยชน์ซึ่งทำให้ง่ายต่อการแก้ไขรหัส elisp หนึ่งมีการเปิดใช้งานแบบอักษรบล็อก src (ปิดโดยค่าเริ่มต้น -> ใช้ตัวแปรต่อไฟล์) ตรวจสอบว่าโหมดอื่นไม่ขัดแย้งสำหรับการแก้ไขบล็อก src (โหมดเติมอัตโนมัติ) ฯลฯ ไม่ต้องการใช้ Cc (backtick) (org-edit-src-block`) เพื่อแก้ไขบล็อก src และจะได้รับเล็กน้อยในการแก้ปัญหา

คำแนะนำของฉันคือ: เริ่มต้นด้วยการแบ่งไฟล์ init ของคุณออกเป็นชิ้นส่วนเล็ก ๆ ลองใช้แพคเกจที่แคบกว่านั้นใช้helm-swoopสำหรับการนำทางอย่างรวดเร็วแล้วลองใช้org-modeดู


1

ฉันเพิ่งลงทุนไปสักระยะเพื่อทำสิ่งนั้น ฉันลงเอยด้วยการกำหนดค่าที่ - ดูแลด้วยโหมด org - ใช้ 'use-package' เพื่อติดตั้งแพ็กเกจที่ขาดหายไปโดยอัตโนมัติ - เป็น repo github ที่ติดตั้งอัตโนมัติแบบนั้น (ปลั๊กไร้ยางอาย: https://github.com / pascalfleury / emacs-config )

ฉันมี 'bootstrapped' ไม่กี่เครื่อง (Linux และ Mac) โดยการโคลน repo และเพิ่มบรรทัดเดียวใน ~ / .emacs และ voila ฉันตั้งค่าตามที่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.