Ответы:
Узел 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)))