วิธีการข้ามไปยังหัวข้อทั่วไปโดยตรงได้อย่างไร


17

หากฉันอยู่ในไฟล์ org ฉันต้องการคำสั่งที่ จำกัด รายชื่อผู้สมัครในสไตล์ ivy / helm ซึ่งประกอบด้วยพาดหัว org ทั้งหมดในไฟล์และให้ฉันเลือกพาดหัวผ่านการค้นหาคลุมเครือซึ่งฉันต้องการข้าม ถึง. มีวิธีทำเช่นนั้นหรือไม่?

คำตอบ:


13

โหนด Org Manual บนMotionให้คำอธิบายที่ค่อนข้างสั้นของคำสั่งในตัวorg-goto(การเชื่อมต่อเริ่มต้น:) C-c C-jซึ่งพฤติกรรมสามารถปรับแต่งได้อย่างง่ายดายเพื่อให้ได้ผลตามที่ต้องการ:

  1. ตรวจสอบเอกสารของตัวแปรที่ปรับแต่งได้ซึ่งแสดงรายการอยู่ท้ายโหนดคู่มือนี้: C-h v org-goto-interface RET
  2. หากคุณมีความสุขที่จะละทิ้งorg-gotoพฤติกรรมเริ่มต้นของการค้นหาโครงร่างของบัฟเฟอร์ที่เพิ่มขึ้นคุณสามารถสลับไปที่การเลือกหัวข้อข่าวผ่านการทำให้สมบูรณ์:

    (setq org-goto-interface 'outline-path-completion)
  3. ผู้ใช้แพ็กเกจที่เสร็จสมบูรณ์เช่นido/ ivy/ helmอาจต้องการเปลี่ยนการตั้งค่าต่อไปนี้เพื่อดูเส้นทางทั้งหมดในคราวเดียว:

    (setq org-outline-path-complete-in-steps nil)

    ดูที่นี่สำหรับการสนทนาเพิ่มเติม

วิธีนี้มีประโยชน์เพิ่ม (มากกว่าการใช้การพูด, helmการทำงาน -specific) ของการทำงานกับทุกกรอบเสร็จปลั๊กที่เป็นค่าเริ่มต้นรวมทั้งที่ฉันสามารถส่วนตัวยืนยันcompleting-readivy

ภาคผนวก:

เมื่อใช้outline-path-completionอินเตอร์เฟสกับorg-gotoคำสั่งดังอธิบายในคำตอบนี้ตัวแปรที่กำหนดเองได้org-goto-max-levelจะกำหนดความลึกสูงสุดของหัวข้อที่จะเสนอ

แก้ไข:

ฉันพบคำถามที่เก่ากว่าและเกี่ยวข้องกับคำตอบที่มีประโยชน์: /programming//q/15011703/3084001

CLARIFICATION (ตามที่ได้รับแจ้งจากความคิดเห็น Att Righ):

การตั้งค่าorg-goto-interfaceเป็นหนึ่งในสองค่าที่รู้จักไม่ได้หมายถึงการเสียสละอินเทอร์เฟซทางเลือก การโทรorg-gotoด้วยอาร์กิวเมนต์คำนำหน้า (เช่นC-u C-c C-jหรือC-u M-x org-goto RET) จะเลือกอินเทอร์เฟซทางเลือกสำหรับการเติมเต็มปัจจุบันโดยอัตโนมัติ ด้วยวิธีนี้คุณสามารถตั้งค่าorg-goto-interfaceเป็นอินเทอร์เฟซที่คุณใช้บ่อยที่สุดและใช้อาร์กิวเมนต์คำนำหน้าเมื่อคุณต้องการเปลี่ยนพฤติกรรมชั่วคราว หากสิ่งนี้ไม่ตรงกับความต้องการของคุณคุณสามารถเขียนเสื้อคลุมของคุณเองorg-gotoตามตัวอย่างของ Att Righ


> ละทิ้งพฤติกรรม org-goto ที่เป็นค่าเริ่มต้นคุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยใช้การผูกให้กับการเรียกใช้การทำงาน(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))
Att Righ

outline-path-completionไม่ได้เล่นอย่างสวยงามhelmบนกล่องของฉัน (มันไม่สามารถผ่านระดับหนึ่งที่ผ่านมา - ทำได้โดยการกด<TAB>ถ้าhelm ปิดการใช้งาน: ดูhelm-completing-read-handlers-alist)
Att Righ

@AttRigh แน่นอนว่า - การletแสดงออกสามารถใช้สำหรับการผูกชั่วคราวใด ๆ ; คำถามนี้เพิ่มเติมเกี่ยวกับการตั้งค่า / ฟังก์ชัน / แพ็คเกจที่เกี่ยวข้อง วิธีทั่วไปที่มากขึ้นในการเปลี่ยนอินเตอร์เฟซชั่วคราวคือการโทรorg-gotoด้วยอาร์กิวเมนต์คำนำหน้า ฉันจะเพิ่มบันทึกคำตอบนี้
บาซิล

@AttRigh ฉันจำได้ว่าเห็นอะไรที่คล้ายกันivyแต่เฉพาะเมื่อ refiling และตั้งค่าความลึกไม่ถูกต้องorg-refile-targetsเนื่องจากorg-gotoจะปรับการตั้งค่าที่เกี่ยวข้องกับ refile ชั่วคราวเพื่อให้เหมาะกับความต้องการ น่าเสียดายที่ฉันไม่ได้อยู่ในฐานะที่จะสำรวจhelmฟังก์ชันการทำงานในขณะนี้ผู้ใช้รายอื่นสามารถพูดสอด
บาซิล

1
ขอบคุณ @Basil สำหรับคำตอบ detaild แต่น่าเสียดายที่แล้วเสร็จในวิธีการนี้ไม่ทำงานเช่นเดียวกับหรือworf counsel-imenu
Ninrod

8

ฉันใช้แพ็คเกจworfแต่ฉันผูกเพียงหนึ่งในหน้าที่:

 (use-package worf
    :diminish worf-mode
    :bind (:map org-mode-map ("C-c h" . worf-goto)))

worf-goto แสดงรายการส่วนหัวในบัฟเฟอร์ในมินิบัฟเฟอร์ซึ่งคุณสามารถกรองได้

แพ็คเกจทำโดยผู้สร้างของivyดังนั้นถ้าคุณชอบไม้เลื้อยคุณอาจชอบ worf

ตัวอย่างบางส่วนที่เกี่ยวข้องจากworf.el:

;;  - "g" (`worf-goto'): select an outline in the current buffer, with
;;    completion.  It's very good when you want to search/navigate to
;;    a heading by word or level. See https://github.com/abo-abo/lispy
;;    for a package that uses this method to navigate Lisp code.

(defun worf-goto-action (x)
  (with-ivy-window
    (goto-char (cdr x))
    (outline-show-children 1000)
    (worf-more)))

(defun worf-goto ()
  "Jump to a heading with completion."
  (interactive)
  (let ((cands (worf--goto-candidates)))
    (cond ((eq worf-completion-method 'helm)
           (require 'helm-multi-match)
           (let (helm-update-blacklist-regexps
                 helm-candidate-number-limit)
             (helm :sources
                   `((name . "Headings")
                     (candidates . ,cands)
                     (action . worf-goto-action)
                     (pattern-transformer . worf--pattern-transformer)))))
          ((eq worf-completion-method 'ivy)
           (ivy-read "Heading: " cands
                     :action 'worf-goto-action)))))

1
ขอบคุณ @tirocinium counsel-imenuเสร็จสมบูรณ์ทำงานได้ดีกว่า worf แต่ไม่สามารถค้นหาหัวข้อข่าวระดับ 1 ได้ worfs ค้นหาทุกระดับดังนั้นฉันคิดว่านี่คือสิ่งที่ฉันกำลังมองหา
ninrod

@ninrod คุณลองตั้งค่าorg-imenu-depthมากกว่าค่าเริ่มต้นของ 2 หรือไม่?
Sam

5

ฉันพบว่า helm-org-rifle ดีเป็นพิเศษ นอกจากนี้ทุกสิ่งที่ใช้แหล่งที่มาของ imenu จะสามารถแสดงส่วนหัว (เช่น Helm with imenu)


ควรสังเกตว่าhelm-org-rifleค้นหาเนื้อหาของรายการองค์กรนอกเหนือจากชื่อเรื่อง ฉันไม่พบวิธีแก้ไขพฤติกรรมนี้ helm-org-rifleการอ้างอิงorg-search-gotoที่ค้นหาหัวข้อทั้งหมด แต่ไม่สนับสนุนการค้นหาแบบคลุมเครือ
Att Righ

Att Righ ถูกต้องhelm-org-rifleไม่ค้นหาเฉพาะส่วนหัว มันสามารถขยายออกเพื่อทำสิ่งนี้ได้ แต่มีเหตุผลเล็กน้อยที่จะทำเช่นนั้นเนื่องจากhelm-org-in-buffer-headingsมีอยู่ใน Helm
blujay

4

imenuสร้างขึ้นใน Emacs และสามารถจับคู่กับ helm / ivy เพื่อให้การค้นหาที่จำเป็น ฉันแนะนำhelm-org-rifleถ้าคุณใช้หางเสือ


4

โปรโมชั่นที่เห็นได้ชัดด้วยตนเอง แต่คุณอาจจะอยากลองออกorgnav ฉันใช้อัลฟ่าประเภทไหน (แต่ฉันใช้งานอย่างแข็งขัน) เพื่อจุดประสงค์นี้

orgnavค้นหาพาดหัวมากกว่าเนื้อหาสามารถเปลี่ยนแปลงความลึกของการค้นหา, subtrees การค้นหามากกว่าทั้งไฟล์ (แม้ว่าสิ่งนี้สามารถทำได้ด้วยการ จำกัด ให้แคบลง)

นี่คือวิดีโอของคุณสมบัติบางอย่าง: https://asciinema.org/a/1r0fp33xgwh48lfgsh7mllw4u

คุณควรตระหนักถึงhelm-orgแพคเกจซึ่งเป็นส่วนหนึ่งของhelmแรงบันดาลใจสำหรับแพ็คเกจนี้ (หรือค่อนข้างมีข้อ จำกัด เป็นแรงบันดาลใจสำหรับแพ็คเกจนี้) รวมhelm-org-rifleถึงการพูดคุยในโพสต์อื่น ๆ

(คำตอบได้ที่นี่: https://www.reddit.com/r/emacs/comments/69mc6l/how_to_jump_directly_to_an_orgheadline/ ) ส่วนที่น่าสนใจก็คือworf-gotoฟังก์ชั่นซึ่งเป็นส่วนหนึ่งของworf(โหมดการนำทาง org ที่ใช้ชุดคีย์ย่อยที่แตกต่างกัน "*" ก่อนหัวข้อ) helm-orgนี้ดูเหมือนว่าคล้ายคลึงอย่างมาก


4

swiperห้องสมุดมีคุณลักษณะใหม่ใน 0.9.0 ซึ่งเป็นเสร็จสิ้นสำหรับหัวข้อของไฟล์ใน org-วาระไฟล์ของคุณ

ที่ปรึกษา-org-วาระพาดหัวข่าว

เพียงแค่ต้องตั้งค่ารายการไฟล์วาระของคุณใน org init

(setq org-agenda-files (list "~/org/work.org"
                             "~/org/school.org" 
                             "~/org/home.org"))

ในความสัมพันธ์กับคำตอบของ @ tirocinium สิ่งนี้ให้เหมือนกัน แต่สำหรับไฟล์วาระต่างๆ


3

ผมใช้counsel-imenu; มันจะแสดงรายการหัวที่แตกต่างกันที่คุณสามารถพิมพ์ตัวอักษรที่จะ จำกัด <return>การเลือกของคุณแล้วเพียงแค่กด


สวัสดี @gnuvince สิ่งนี้ไม่อนุญาตให้ฉันข้ามไปยังไฟล์ระดับ 1 ใช่มั้ย
ninrod

2

helm-org-in-buffer-headingsผมขอแนะนำให้ มันมีอยู่ในตัวของ Helm และจะเคารพบัฟเฟอร์ที่แคบซึ่งเป็นสิ่งสำคัญหากคุณใช้บัฟเฟอร์ทางอ้อมเพื่อแก้ไข subtrees อย่างอิสระ นอกจากนี้ยังมีhelm-org-parent-headingsการนำทางต้นไม้และhelm-org-agenda-files-headingsนำทางไฟล์วาระทั้งหมด

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