Ответы:
Узел Org Manual в Motion дает несколько лаконичное описание встроенной команды org-goto(связывание по умолчанию:) C-c C-j, поведение которой можно легко настроить для достижения желаемого эффекта:
C-h v org-goto-interface RETЕсли вы счастливы отказаться от org-gotoповедения по умолчанию при постепенном поиске по схеме буфера, вы можете переключиться на выбор заголовка через завершение:
(setq org-goto-interface 'outline-path-completion)Пользователи пакетов завершения, такие как ido/ ivy/ helm, вероятно, захотят изменить следующую настройку, чтобы сразу увидеть весь целевой путь:
(setq org-outline-path-complete-in-steps nil)
Смотрите здесь для дальнейшего обсуждения.
Такой подход имеет дополнительное преимущество ( по сравнению с использованием, скажем, helm-специфическая функциональностью) работой со всеми рамками завершения этой вилки в значении по умолчанию completing-read, в том числе, как я могу лично подтвердить, ivy.
ДОПОЛНЕНИЕ:
При использовании outline-path-completionинтерфейса с org-gotoкомандой, как описано в этом ответе, настраиваемая переменная org-goto-max-levelопределяет максимальную глубину заголовков, которые можно предложить.
РЕДАКТИРОВАТЬ:
Я нашел более старый, актуальный вопрос с полезными ответами: /programming//q/15011703/3084001
УТОЧНЕНИЕ (как подсказано комментарием Атта Рая):
Установка 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.
outline-path-completionне очень хорошо играет helmна моем боксе (он не может пройти более одного уровня - достигается нажатием <TAB>if helm is disabled: see helm-completing-read-handlers-alist)
letвыражения могут быть использованы для любого вида временной привязки; этот вопрос больше о соответствующих настройках / функциональности / пакетах. Более общим способом достижения временного переключения интерфейса является вызов org-gotoс префиксным аргументом. Я добавлю примечание к этому ответу.
ivy, но только при рефилировании и с неправильной настройкой глубины org-refile-targets, поскольку org-gotoвременно адаптирует релевантные для рефиллинга настройки в соответствии со своими потребностями. К сожалению, я не в состоянии изучить helmфункциональность в данный момент, может быть, другой пользователь может подключиться?
worfили counsel-imenu.
Я использую пакет worf , но связываю только одну из его функций:
(use-package worf
:diminish worf-mode
:bind (:map org-mode-map ("C-c h" . worf-goto)))
worf-goto выдает список заголовков в буфере в мини-буфере, который затем можно отфильтровать.
Пакет сделан автором ivy , поэтому если вам нравится 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)))))
counsel-imenuзавершение работает лучше, чем worf, но не может искать в заголовках org уровня 1. worfs ищет все уровни, поэтому я думаю, что это то, что я ищу.
org-imenu-depthчто-то большее, чем значение по умолчанию 2?
Я считаю рулевую винтовку особенно приятной. Также все, что берет источник imenu, сможет отображать заголовки (например, Helm with imenu).
helm-org-rifleпоиск по содержанию записей орг в дополнение к их заголовкам. Я не нашел способа изменить это поведение. helm-org-rifleссылки, org-search-gotoкоторые ищут все заголовки, но не поддерживают нечеткий поиск.
helm-org-rifleне ищет только заголовки. Его можно расширить, чтобы сделать это, но для этого нет особых причин, поскольку helm-org-in-buffer-headingsв самом Хелме существует и т. Д.
Самореклама вопиющая, но вы можете попробовать orgnav . Это мой альфа-проект (но активно используемый мной) для этой цели.
orgnav ищет заголовки, а не содержимое, может варьировать глубину поиска, искать поддеревья, а не весь файл (хотя это также может быть достигнуто с помощью сужения).
Вот видео некоторых функций: 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.
В библиотеке swiper появилась новая функция 0.9.0, которая дополняет заголовки файлов в ваших файлах org-повестки дня.
адвокат-орг-Agenda-заголовки
Просто нужно настроить список файлов повестки дня в org init.
(setq org-agenda-files (list "~/org/work.org"
"~/org/school.org"
"~/org/home.org"))
Что касается ответа @ tirocinium, то это то же самое, но для многих файлов повестки дня.
Я рекомендую helm-org-in-buffer-headings. Он встроен в Helm и учитывает суженные буферы, что важно, если вы используете косвенные буферы для независимого редактирования поддеревьев. Существует также helm-org-parent-headingsдля навигации по дереву, а также helm-org-agenda-files-headingsдля навигации по всем файлам повестки дня.
(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))