Làm thế nào để nhảy trực tiếp đến một tiêu đề org?


15

Nếu tôi đang ở trong một tệp org, tôi muốn một lệnh thu hẹp danh sách ứng cử viên, theo kiểu ivy / helm, bao gồm tất cả các tiêu đề org trong tệp và cho phép tôi chọn tiêu đề, thông qua tìm kiếm mờ, mà tôi muốn nhảy đến. Có cách nào làm được việc này không?

Câu trả lời:


13

Nút Org Manual trên Motion cung cấp một mô tả hơi đơn giản về lệnh tích hợp org-goto(ràng buộc mặc định C-c C-j:), có hành vi có thể dễ dàng được tùy chỉnh để đạt được hiệu quả mong muốn:

  1. Kiểm tra tài liệu về biến tùy chỉnh được liệt kê ở cuối nút thủ công này: C-h v org-goto-interface RET
  2. Nếu bạn vui lòng từ bỏ org-gotohành vi mặc định tìm kiếm tăng dần thông qua phác thảo của bộ đệm, bạn có thể chuyển sang chọn một tiêu đề thông qua hoàn thành:

    (setq org-goto-interface 'outline-path-completion)
  3. Người dùng của các gói hoàn thành như ido/ ivy/ helmcó thể sẽ muốn thay đổi cài đặt sau để xem toàn bộ đường dẫn đích cùng một lúc:

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

    Xem ở đây để thảo luận thêm.

Cách tiếp cận này có thêm lợi ích (hơn là sử dụng helmchức năng cụ thể) khi làm việc với tất cả các khung hoàn thành cắm vào mặc định completing-read, bao gồm, như cá nhân tôi có thể xác nhận , ivy.

ĐỊA CHỈ:

Khi sử dụng outline-path-completiongiao diện cho org-gotolệnh như được mô tả trong câu trả lời này, biến tùy chỉnh sẽ org-goto-max-levelxác định độ sâu tối đa của tiêu đề sẽ cung cấp.

BIÊN TẬP:

Tôi tìm thấy một câu hỏi cũ hơn, có liên quan với câu trả lời hữu ích: /programming//q/15011703/3084001

XÁC NHẬN (như được nhắc bởi nhận xét của Att Righ):

Đặt org-goto-interfacethành một trong hai giá trị được công nhận không có nghĩa là hy sinh giao diện thay thế. Gọi org-gotovới một đối số tiền tố (tức là C-u C-c C-jhoặc C-u M-x org-goto RET) tự động chọn giao diện thay thế cho việc hoàn thành hiện tại. Bằng cách này, bạn có thể thiết lập org-goto-interfacegiao diện mà bạn có khả năng sử dụng thường xuyên nhất và sử dụng đối số tiền tố khi bạn muốn tạm thời chuyển đổi hành vi. Nếu thậm chí điều này không phù hợp với nhu cầu của bạn, bạn luôn có thể viết trình bao bọc của riêng mình org-goto, theo ví dụ của Att Righ.


> từ bỏ hành vi org-goto mặc định, bạn có thể khắc phục điều này bằng cách sử dụng liên kết cho phép xung quanh cuộc gọi chức năng(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))
Att Righ

outline-path-completionkhông chơi độc đáo với helmhộp của tôi (nó không thể hoàn thành qua một cấp - đạt được bằng cách nhấn <TAB>nếu helm bị vô hiệu hóa: xem helm-completing-read-handlers-alist)
Att Righ

@AttRigh Chắc chắn, các letbiểu hiện có thể được sử dụng cho bất kỳ loại ràng buộc tạm thời nào; câu hỏi này là nhiều hơn về các cài đặt / chức năng / gói có liên quan. Một cách tổng quát hơn để đạt được một chuyển đổi tạm thời của giao diện là gọi org-gotovới một đối số tiền tố. Tôi sẽ thêm một ghi chú cho câu trả lời này.
Basil

@AttRigh Tôi nhớ đã thấy một cái gì đó tương tự ivy, nhưng chỉ khi nạp lại và với cài đặt độ sâu không chính xác org-refile-targets, vì org-gototạm thời điều chỉnh các cài đặt liên quan đến refile cho phù hợp với nhu cầu của nó. Thật không may, tôi không ở vị trí để khám phá helmchức năng tại thời điểm này, có lẽ một người dùng khác có thể kêu gọi?
Basil

1
cảm ơn @Basil vì câu trả lời chi tiết. Thật không may, việc hoàn thành trong phương pháp này không hoạt động tốt như worfhoặc counsel-imenu.
ninrod

8

Tôi sử dụng gói worf , nhưng tôi chỉ ràng buộc một trong các chức năng của nó:

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

worf-goto cung cấp cho bạn một danh sách các tiêu đề trong bộ đệm trong bộ đệm mini, sau đó bạn có thể lọc.

Gói được thực hiện bởi tác giả của cây thường xuân , vì vậy nếu bạn thích cây thường xuân, bạn có thể thích worf.

Một số đoạn có liên quan từ 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
cảm ơn @tirocinium. counsel-imenuhoàn thành hoạt động tốt hơn worf nhưng không thể tìm kiếm thông qua các tiêu đề org cấp 1. worfs tìm kiếm tất cả các cấp, vì vậy tôi nghĩ đây là những gì tôi đang tìm kiếm.
ninrod

@ninrod Bạn đã thử cài đặt org-imenu-depththành thứ gì đó lớn hơn mặc định của 2 chưa?
Sam

5

Tôi thấy helm-org-rifle đặc biệt tốt. Ngoài ra, bất cứ thứ gì lấy nguồn imothy đều có thể hiển thị các tiêu đề (ví dụ: Helm với imothy).


Cần lưu ý rằng helm-org-rifletìm kiếm nội dung của các mục org ngoài tiêu đề của chúng. Tôi không tìm thấy cách nào để thay đổi hành vi này. helm-org-rifletài liệu tham khảo org-search-gototìm kiếm tất cả các tiêu đề nhưng không thực sự hỗ trợ tìm kiếm mờ.
Att Righ

Att Righ là đúng, helm-org-riflekhông chỉ tìm kiếm tiêu đề. Nó có thể được mở rộng để làm điều này, nhưng có rất ít lý do để làm như vậy, vì helm-org-in-buffer-headings, v.v. tồn tại trong chính Helm.
blujay

4

imenuđược tích hợp vào Emacs và có thể được ghép nối với helm / ivy để cung cấp tìm kiếm mờ cần thiết. Tôi muốn giới thiệu helm-org-riflenếu bạn sử dụng helm, tuy nhiên.


4

Tự quảng cáo trắng trợn, nhưng bạn có thể muốn dùng thử orgnav . Đó là loại alpha (nhưng được tôi sử dụng tích cực) cho mục đích này.

orgnav tìm kiếm các tiêu đề thay vì nội dung, có thể thay đổi độ sâu tìm kiếm, tìm kiếm phụ hơn là toàn bộ tệp (mặc dù điều này cũng có thể đạt được khi thu hẹp).

Đây là video về một số tính năng: https://asciinema.org/a/1r0fp33xgwh48lfgsh7mllw4u

Có lẽ bạn cũng nên biết về helm-orggói đó là một phần trong helmđó là nguồn cảm hứng cho gói này (hay đúng hơn là những hạn chế của nó là nguồn cảm hứng cho gói này), cũng như được helm-org-riflethảo luận trong các bài đăng khác.

(Ảnh cung cấp câu trả lời ở đây: https://www.reddit.com/r/emacs/comments/69mc6l/how_to_jump_directly_to_an_orgheadline/ ) Cũng có khả năng quan tâm là các worf-gotochức năng như là một phần của worf(một chế độ chuyển hướng org áp dụng một bộ khác nhau của keybindings trên "*" trước các tiêu đề). Điều này có vẻ rất giống với helm-org.


4

Các swiper thư viện có một tính năng mới trong 0.9.0, đó là hoàn thành cho các tiêu đề của tập tin trong org-chương trình nghị sự-tập tin của bạn.

tư vấn-org-agenda-tiêu đề

Chỉ cần thiết lập danh sách tập tin chương trình nghị sự của bạn trong org init.

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

Liên quan đến câu trả lời của @ tirocinium, điều này cung cấp tương tự nhưng đối với nhiều tệp chương trình nghị sự.


3

Tôi sử dụng counsel-imenu; nó sẽ liệt kê các đầu khác nhau, bạn có thể nhập một số chữ cái để thu hẹp lựa chọn của bạn và sau đó chỉ cần nhấn <return>.


chào @gnuvince. Điều này không cho phép tôi chuyển sang tập tin org cấp 1 phải không?
ninrod

2

Tôi đề nghị helm-org-in-buffer-headings. Nó được tích hợp sẵn với Helm và nó tôn trọng các bộ đệm bị thu hẹp, điều này rất quan trọng nếu bạn sử dụng bộ đệm gián tiếp để chỉnh sửa các cây con một cách độc lập. Ngoài ra còn có helm-org-parent-headingsđể điều hướng lên một cái cây và helm-org-agenda-files-headingsđể điều hướng trên tất cả các tệp chương trình nghị sự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.