Sublime Text 2's “Goto Anything” (or instant search) for Emacs?

后端 未结 5 1093
醉话见心
醉话见心 2021-01-30 17:36

I tried out Sublime Text 2 recently, and I found Goto Anything superbly useful for navigating source code (Ctrl-P file@symbol seems to work really well). Is there something simi

相关标签:
5条回答
  • 2021-01-30 18:18

    for emacs I customize and modify this solution (for use install helm):

    (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)
    

    primary it based on @see https://news.ycombinator.com/item?id=6872508 but on last helm versions not work but fixed with my changes (just copy/paste from some internal helm modules)

    0 讨论(0)
  • 2021-01-30 18:30

    Just use helm.

    It is perhaps more configuration than you asked for, but once you get it configured how you like, it should be quite comfortable. Very much like Emacs ;).

    And you should file a bug with Thierry for getting some more newbie friendly defaults. He is quite responsive with issues.

    helm-multi-occur

    Primarily multi-buffer interactive "occur" is provided through helm-multi-occur. If you execute the command, you'll notice that you have to pick some buffers first (use C-SPC to select from the list, M-SPC to select all). Then you can enter your query at the next prompt. It's easy to make your own version that skips the buffer selection like so:

    (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

    Often you don't care about the exact occurrences of the query string, but want a list of all buffers that contain it.

    helm-buffers-list has some tricks up its sleeve. The first symbol you specify is filtering by major-mode, and you can use the "@" prefix to narrow the list to buffers that contain a string.

    To wit, "ruby @prompt" will show you a list of buffers whose major-mode contains "ruby" and whose contents contains "prompt". Or you can just use "@prompt" to show all buffers that contain "prompt".


    Powerful and comfortable once you get used to it.


    EDIT modified my-helm-multi-all to enable helm-follow-mode.

    EDIT 2 update helm-follow-mode code to reflect helm changes.

    EDIT 3 updated again to reflect helm changes

    0 讨论(0)
  • 2021-01-30 18:32
    1. Heml is far from the fuzzy searching of ST3.

    2. Fiplr looks promising but doesn't work on my laptop (see first issue on the github)

    3. Simp.el looks like Fiplr but doesn't work either on my end.

    4. Projectile works for me! Here's your solution!

    I used also ido-mode and flx-ido for the fuzzy searching,

    and for the vertical way of displaying results I use this in my .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)
    
    0 讨论(0)
  • 2021-01-30 18:38

    Icicles offers some features that are similar to what it seems you are looking for.

    1. C-x b and C-x C-f, to choose buffers or files, allow multi-completion: you can type a pattern to match the buffer/file name and/or a pattern to match content in the buffer/file. Candidates are filtered incrementally as you type (what you call "instant" is what Emacs calls "incremental"). You can refine either or both search patterns progressively, narrowing the choices in different ways. You can visit any number of buffers/files that match, at the same time. You can also use the same method to search the marked files in Dired: C-F.

    2. C-c `(icicle-search) incrementally searches across multiple buffers or files. Again, progressive refinement etc.

    The main difference between #1 and #2 is this:

    • For #1, you just want to find matching buffers or files. You don't care immediately about finding particular occurrences --- any match suffices.

    • For #2, you provide the buffers or files to search, and you want to navigate among search hits.

    You can also use #1 to locate the buffers and files you want, then search their contents: The content-matching pattern you last used is available as the search pattern for Isearch (C-s).

    0 讨论(0)
  • 2021-01-30 18:40

    Emacs has Projectile satisfy your need:

    • jump to a file in project
    • multi-occur in project buffers
    0 讨论(0)
提交回复
热议问题