如何直接跳到组织标题?


17

如果我在组织文件中,则需要一个命令来缩小常春藤/头盔样式的候选列表,该列表由文件中的所有组织标题组成,并允许我通过模糊搜索选择要跳转到的标题至。有没有办法做到这一点?

Answers:


13

Motion上的Org Manual节点对内置命令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特定功能相比)具有更多的好处(与使用插入默认值的所有完成框架一起使用)completing-read,包括我个人确认的ivy

附录:

如本答案所述,当使用命令outline-path-completion界面时org-goto,可自定义变量org-goto-max-level确定要提供的标题的最大深度。

编辑:

我发现了一个较旧的相关问题,并提供了有用的答案:https : //stackoverflow.com/q/15011703/3084001

澄清(由Att Righ的评论提示):

设置org-goto-interface为两个公认的值之一并不意味着要牺牲替代接口。org-goto使用前缀参数(即C-u C-c C-jC-u M-x org-goto RET)进行调用会自动选择当前完成的替代接口。这样,您可以设置org-goto-interface最可能使用的接口,并在需要临时切换行为时使用prefix参数。即使这仍然不能满足您的需求,也可以org-goto按照Att Righ的示例始终编​​写自己的包装器。


>放弃默认的org-goto行为,您可以通过在函数调用周围使用let绑定来解决此问题(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))
Att Righ

outline-path-completion不能helm在我的盒子上很好地玩(不能完成一个关卡-通过按<TAB>if helm 禁用来实现:请参阅helm-completing-read-handlers-alist
Att Righ

@AttRigh当然,-expressions let可用于任何形式的临时绑定;这个问题更多地是关于相关的设置/功能/软件包。实现接口临时切换的更通用方法是org-goto使用prefix参数进行调用。我将在此答案中添加注释。
巴兹尔(Basil)

@AttRigh我记得看到了与相似的东西ivy,但是仅当重新刷新并且在中使用了错误的深度设置时org-refile-targets,因为org-goto临时调整了与重新归档相关的设置以适应其需求。不幸的是,目前我无法探索其helm功能,也许其他用户可以加入?
巴兹尔(Basil)

1
感谢@Basil提供详细答案。不幸的是,这种方法的完成效果不及worfcounsel-imenu
ninrod

8

我使用包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)))))

1
谢谢@tirocinium。counsel-imenu完成功能比工作世界更好,但无法搜索level1组织的头条新闻。worfs搜索所有级别,因此我认为这是我想要的。
ninrod '17

@ninrod您是否尝试过设置org-imenu-depth大于默认值2的值?
山姆

5

我觉得头盔步枪特别好。同样,任何使用imenu源的东西都将能够显示标题(例如,带有imenu的Helm)。


应该注意的是,除了标题以外,还helm-org-rifle搜索组织条目的内容。我发现没有办法改变这种行为。helm-org-rifle引用org-search-goto这不搜索所有的头条新闻,但真的不支持模糊搜索。
Att Righ

Att Righ是正确的,helm-org-rifle不只搜索标题。可以将其扩展为执行此操作,但是这样做的理由很少,因为helm-org-in-buffer-headingsHelm本身中存在等。
blujay

4

imenu内置于Emacs中,可以与helm / ivy配对以提供所需的模糊搜索。但是,我建议helm-org-rifle您是否使用头盔。


4

公然的自我推销,但您可能想尝试orgnav。为此目的,这是我的Alpha项目(但我一直在积极使用)。

orgnav搜索标题而不是内容可以改变搜索的深度,搜索子树而不是整个文件(尽管也可以通过缩小来实现)。

这是一些功能的视频:https : //asciinema.org/a/1r0fp33xgwh48lfgsh7mllw4u

您可能还应该知道helm-org软件包,其中的一部分helm是此软件包的灵感(或者说,其局限性是此软件包的灵感),并helm-org-rifle在其他文章中进行了讨论。

(此处提供的答案:https : //www.reddit.com/r/emacs/comments/69mc6l/how_to_jump_direct_to_an_orgheadline/ )另外,worf-goto作为该功能的一部分worf(组织导航模式,该功能将一组不同的键绑定应用于标题之前为“ *”)。这似乎非常类似于helm-org


4

刷卡图书馆在0.9.0中的新功能,这是在您的组织,议程文件文件的标题完成。

律师组织议程头条

只需在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中,并且遵守狭窄的缓冲区,如果您使用间接缓冲区独立地编辑子树,则这很重要。还helm-org-parent-headings可以浏览一棵树,并helm-org-agenda-files-headings浏览所有议程文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.