組織の見出しに直接ジャンプする方法は?


16

組織ファイルを使用している場合、ファイル内のすべての組織ヘッドラインで構成されるアイビー/ヘルムスタイルで候補リストを絞り込み、ファジー検索を使用してジャンプ先のヘッドラインを選択できるコマンドが必要ですに。それを行う方法はありますか?

回答:


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-completionorg-gotoコマンドへのインターフェイスを使用する場合、カスタマイズ可能な変数org-goto-max-levelは、提供する見出しの最大の深さを決定します。

編集:

私は有用な答えを持つ古い関連する質問を見つけました:https : //stackoverflow.com/q/15011703/3084001

明確化(Att Righのコメントによって促される):

org-goto-interface認識されている2つの値のいずれかに設定しても、代替インターフェースを犠牲にすることにはなりません。org-gotoプレフィックス引数(C-u C-c C-jまたはC-u M-x org-goto RET)を使用して呼び出すと、現在の補完の代替インターフェイスが自動的に選択されます。このようにして、org-goto-interface最も頻繁に使用する可能性が高いインターフェイスに設定し、一時的に動作を切り替えたいときにプレフィックス引数を使用できます。これでもニーズに合わない場合は、org-gotoAtt Righの例のように、いつでも独自のラッパーを作成できます。


>デフォルトORG-goto文の動作を見送る、あなたは、機能の呼び出しの周りに結合させ使用することによって、これを回避することができます(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))
肥満児RIGH

outline-path-completionうまく再生されないhelm私の箱の上に( -それはできない、完全な過去1度押すことによって達成<TAB>場合helm :参照無効になっていますhelm-completing-read-handlers-alist
肥満児RIGH

@AttRighもちろん、-expressions letはあらゆる種類の一時的なバインディングに使用できます。この質問は、関連する設定/機能/パッケージに関するものです。インターフェイスの一時的な切り替えを実現するより一般的な方法はorg-goto、プレフィックス引数で呼び出すことです。この回答にメモを追加します。
バジル

@AttRighに似たものを見たことを覚えていますがivy、リファイリング関連の設定を一時的にそのニーズに合わせて調整するため、でリファイリングしorg-refile-targets、深さの設定が正しくありませんorg-goto。残念ながら、私はhelm現時点で機能を探求する立場にありません。おそらく別のユーザーが口を閉ざすことができますか?
バジル

1
詳細な回答を@Basilに感謝します。残念ながら、このアプローチでの完成はと同様に動作しませんworfcounsel-imenu
ニンロッド

8

パッケージworfを使用しますが、その機能の1つのみをバインドします。

 (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補完はworfよりも優れていますが、レベル1の組織の見出しを検索できません。worfsはすべてのレベルを検索するため、これが私が探しているものだと思います。
ニンロッド

@ninrod org-imenu-depthデフォルトの2より大きい値に設定しようとしましたか?
サム

5

helm-org-rifleは特にいいと思います。また、imenuのソースを取得するものはすべてヘッダーを表示できます(例:Helm with imenu)。


タイトルに加えて組織エントリhelm-org-rifleコンテンツを検索することに注意してください。この動作を変更する方法は見つかりませんでした。すべてのヘッドラインを検索するが、ファジー検索を実際にサポートしないhelm-org-rifle参照org-search-goto
肥満児RIGH

At Righは正しいhelm-org-rifleです。見出しだけを検索しません。これを行うために拡張することもできますhelm-org-in-buffer-headingsが、ヘルム自体になどが存在するため、そうする理由はほとんどありません。
ブルージェイ

4

imenuEmacsに組み込まれており、helm / ivyと組み合わせて、必要なファジー検索を提供できます。helm-org-rifleただし、ヘルムを使用する場合はお勧めします。


4

目立った自己宣伝ですが、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ます。


4

swiperのライブラリには、あなたの組織・アジェンダ・ファイル内のファイルの見出しの完了である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の組織ファイルにジャンプできませんか?
ニンロッド

2

をお勧めしhelm-org-in-buffer-headingsます。Helmに組み込まれており、ナローバッファを尊重します。これは、間接バッファを使用してサブツリーを個別に編集する場合に重要です。helm-org-parent-headingsツリーを上に移動したり、helm-org-agenda-files-headingsすべてのアジェンダファイルを移動したりすることもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.