25

最近SublimeText2を試してみたところ、 Goto Anythingがソースコードのナビゲートに非常に役立つことがわかりました(Ctrl-P file @ symbolは非常にうまく機能しているようです)。Emacsに似たものはありますか?できれば、大量のカスタムelispがなくても、うまく機能するものが望ましいです。

私がこれまでに試したこと:

  1. Helm and Anythingを見たことがありますが、私が理解している限り、どちらも実際の「インスタント」検索はできません(以下の編集を参照)。

  2. 私は使用しましmulti-occur-in-matching-buffersたが、それも「インスタント」基準を満たすことができないようです。

  3. imenu/idomenu単一のファイルではうまく機能しますが、ファイル間では機能しません。

私は現在、Goto Anythingの代わりとして、#2と#3を一緒に使用しています。

Goto Anythingの正確なクローンではない場合は、単純なインスタント検索ソリューション(開いているすべてのバッファーで特定の文字列を検索し、結果を動的に表示するソリューション)を使用できます。だからそれも受け入れられます。

私はEmacs24.2を使用しているので、v24のみのelispでも問題ありません。

編集: event_jrの提案で、Helmに別のショットを与えましたが、開いているすべてのバッファーでのインスタント検索サポートされていることがわかりました。helm-multi-occur+helm-follow-mode驚くほど私のニーズを満たすことに近づきましたが、マイナーな問題は次のとおりです(つまらないように聞こえるリスクがあります)。

  • を実行したときにhelm-follow-mode 自動的にオンにする方法が見つかりませんhelm-multi-occur。を使用して手動で呼び出す必要がありC-c C-fます。誰かがelispのスニペットでこれを撃ちたいと思っていますか?(以下の編集#2を参照)

  • ST2のGotoAnythingのように「インテリジェント」ではありません(つまり、Goto Anythingのように、ソースコードの「シンボル」を理解しません)。

編集#2以下のevent_jrの回答のおかげで(そしてもちろん、Helmの作成者であるThierry Volpiattoのおかげで)、GotoAnythingのほとんどを手に入れました。同様の機能をお探しの方には心からお勧めします。以下は私が現在使用しているelispです:

;; instant recursive grep on a directory with helm
(defun instant-rgrep-using-helm ()
  "Recursive grep in a directory."
  (interactive)
  (let ((helm-after-initialize-hook #'helm-follow-mode))
    (helm-do-grep)))


;; instant search across all buffers with helm
(defun instant-search-using-helm ()
  "Multi-occur in all buffers backed by files."
  (interactive)
  (let ((helm-after-initialize-hook #'helm-follow-mode))
    (helm-multi-occur
     (delq nil
           (mapcar (lambda (b)
                     (when (buffer-file-name b) (buffer-name b)))
                   (buffer-list))))))

;; set keybindings
(global-set-key (kbd "C-M-s") 'instant-search-using-helm)
(global-set-key (kbd "C-M-S-s") 'helm-resume)
(global-set-key (kbd "C-M-g") 'instant-rgrep-using-helm)
4

5 に答える 5

19

ヘルムを使用するだけです。

おそらくあなたが要求したよりも多くの構成ですが、あなたがそれを好きなように構成したら、それは非常に快適なはずです。Emacsと非常によく似ています;)。

また、初心者向けのデフォルトを取得するには、Thierryにバグを報告する必要があります。彼は問題に非常に敏感です。

helm-multi-occur

主にマルチバッファインタラクティブ「発生」は、を介して提供され helm-multi-occurます。コマンドを実行すると、最初にいくつかのバッファーを選択する必要があることに気付くでしょう(C-SPCリストから選択するために使用し、 M-SPCすべてを選択するために使用します)。次に、次のプロンプトでクエリを入力できます。次のように、バッファの選択をスキップする独自のバージョンを作成するのは簡単です。

(eval-after-load "helm-regexp"
    '(setq helm-source-moccur
           (helm-make-source "Moccur"
               'helm-source-multi-occur :follow 1)))

(defun my-helm-multi-all ()
  "multi-occur in all buffers backed by files."
  (interactive)
  (helm-multi-occur
   (delq nil
         (mapcar (lambda (b)
                   (when (buffer-file-name b) (buffer-name b)))
                 (buffer-list)))))

helm-buffers-list

多くの場合、クエリ文字列の正確な出現は気にしませんが、それを含むすべてのバッファのリストが必要です。

helm-buffers-listその袖にいくつかのトリックがあります。指定する最初の記号はメジャーモードによるフィルタリングであり、「@」プレフィックスを使用して、文字列を含むバッファーにリストを絞り込むことができます。

つまり、「ruby @prompt」は、メジャーモードに「ruby」が含まれ、その内容に「prompt」が含まれるバッファのリストを表示します。または、「@ prompt」を使用して、「prompt」を含むすべてのバッファーを表示することもできます。


慣れればパワフルで快適。


EDITmy-helm-multi-allはhelm-follow-modeを有効にするように変更されました。

helm-follow-modeヘルムの変更を反映するように2つの更新コードを編集します。

ヘルムの変更を反映するために編集3が再度更新されました

于 2013-02-06T14:42:24.360 に答える
7

EmacsはProjectileであなたのニーズを満たします:

  • プロジェクト内のファイルにジャンプします
  • プロジェクトバッファで複数回発生
于 2013-02-06T14:34:21.653 に答える
1
  1. Hemlは、ST3のあいまい検索からはほど遠いです。

  2. Fiplrは有望に見えますが、私のラップトップでは機能しません(githubの最初の問題を参照してください)

  3. Simp.elはFiplrのように見えますが、私の側でも機能しません。

  4. 発射物は私のために働きます!これがあなたの解決策です!

あいまい検索にはido-modeとflx-idoも使用しました。

結果を垂直に表示する方法として、これを.emacsで使用します。

;; Display ido results vertically, rather than horizontally
(setq ido-decorations (quote ("\n-> " "" "\n   " "\n   ..." "[" "]" " [No match]" " [Matched]" " [Not readable]" " [Too big]" " [Confirm]")))
(defun ido-disable-line-truncation () (set (make-local-variable 'truncate-lines) nil))
(add-hook 'ido-minibuffer-setup-hook 'ido-disable-line-truncation)
(defun ido-define-keys () ;; C-n/p is more intuitive in vertical layout
  (define-key ido-completion-map (kbd "C-n") 'ido-next-match)
  (define-key ido-completion-map (kbd "C-p") 'ido-prev-match))
(add-hook 'ido-setup-hook 'ido-define-keys)
于 2014-08-05T06:48:29.377 に答える
0

つららは、あなたが探しているように見えるものに似たいくつかの機能を提供します。

  1. C-x bおよび、バッファまたはファイルを選択するには、マルチコンプリーションを許可します。バッファ/ファイル名に一致するパターンおよび/またはバッファ/ファイルのコンテンツに一致C-x C-fするパターンを入力できます。入力すると候補が段階的にフィルタリングさます(「インスタント」と呼ばれるものは、Emacsが「インクリメンタル」と呼ぶものです)。どちらかまたは両方の検索パターンを段階的に絞り込み、さまざまな方法で選択肢を絞り込むことができます。一致する任意の数のバッファ/ファイルに同時にアクセスできます。同じ方法を使用して、Diredでマークされたファイルを検索することもできます。C-F

  2. C-c `icicle-search)複数のバッファまたはファイルを段階的に検索します。繰り返しますが、プログレッシブリファインメントなど。

#1と#2の主な違いは次のとおりです。

  • #1の場合、一致するバッファまたはファイルを検索するだけです。あなたは特定の出来事を見つけることについてすぐに気にしません---どんな一致でも十分です。

  • #2の場合、検索するバッファーまたはファイルを提供し、検索ヒット間を移動します。

#1を使用して、必要なバッファーとファイルを見つけて、それらのコンテンツを検索することもできます。最後に使用したコンテンツ一致パターンは、Isearch(C-s)の検索パターンとして使用できます。

于 2013-08-10T21:07:43.660 に答える
0

emacsの場合、私はこのソリューションをカスタマイズおよび変更します(インストールヘルムを使用するため):

(defun helm-occur-from-point (initial-value)
  "Invoke `helm-occur' from point."
  (interactive)
  (let ((input initial-value)
        (bufs (list (buffer-name (current-buffer)))))
    ;; (isearch-exit)
    (helm-occur-init-source)
    (helm-attrset 'moccur-buffers bufs helm-source-occur)
    (helm-set-local-variable 'helm-multi-occur-buffer-list bufs)
    (helm-set-local-variable
     'helm-multi-occur-buffer-tick
     (cl-loop for b in bufs
              collect (buffer-chars-modified-tick (get-buffer b))))
    (helm :sources 'helm-source-occur
          :buffer "*helm occur*"
          :history 'helm-grep-history
          :input input
          :truncate-lines t)))

(defun get-point-text ()
    "Get 'interesting' text at point; either word, or region"
    (if mark-active
        (buffer-substring (mark) (point))
      (thing-at-point 'symbol)))
  (defun helm-occur-1 (initial-value)
    "Preconfigured helm for Occur with initial input."
    (helm-occur-from-point initial-value))
  (defun bk-helm-occur ()
    "Invoke helm-occur with initial input configured from text at point"
    (interactive)
    (helm-occur-1 (get-point-text)))
  (global-set-key (kbd "M-s-o") 'bk-helm-occur)

プライマリは@seehttps://news.ycombinator.com/item ?id= 6872508に基づいていますが、最後のヘルムバージョンでは機能しませんが、私の変更で修正されています(一部の内部ヘルムモジュールからコピー/貼り付けするだけです)

于 2014-09-18T21:17:38.993 に答える