this post was submitted on 12 Oct 2023
5 points (100.0% liked)

Emacs

322 readers
4 users here now

A community for the timeless and infinitely powerful editor. Want to see what Emacs is capable of?!

Get Emacs

Rules

  1. Posts should be emacs related
  2. Be kind please
  3. Yes, we already know: Google results for "emacs" and "vi" link to each other. We good.

Emacs Resources

Emacs Tutorials

Useful Emacs configuration files and distributions

Quick pain-saver tip

founded 2 years ago
MODERATORS
 

I am a C++ dev. I am now able to follow up symbols or files using LSP,/projectile/ivy/transient aso... but inside one file, I have difficulties going quickly up function by function, or by if/for statement. Do you know a convenient way to do this ? I am interested in any navigation tips as well ! Thanks for your help !

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 1 points 1 year ago (1 children)

Here are some ways to move around. The first two are in vanilla Emacs. (There are previous functions corresponding to the next functions mentioned.)

  • C-M-e and C-M-a: Move to next "defun" (function definition).

  • Imenu, if you know the name of the thing (e.g. a definition) you`re looking for. (Various libraries let you complete/filter and cycle among candidates.)

  • next-visible-thing. Moves to end of next THING. First nonconsecutive use prompts for THING type. Or use next-visible-thing to define such a command for a specific kind of THING (so no prompt needed for the kind).

    Requires library thing-cmds.el, which requires hide-comnt.el.

    Predefined THINGS (library thingatpt+.el needed for some):

    sexp, button, char, char-same-line, color, comment, decimal-number, defun, email, filename, hex-number, line, list, list-contents, non-nil-symbol-name, number, overlay, page, paragraph, region-or-word, sentence, string, string-contents, symbol, symbol-name, unquoted-list, url, whitespace, whitespace-&-newlines, word

    "Visible" means invisible text is skipped. Option ignore-comments-flag controls whether to also ignore text in comments.

  • Command fw-to-next-thing. Moves to the start of the next THING (unlike next-visible-thing, which moves to its end).

    Requires libraries find-where.el and thingatpt+.el needed for some).

    Library find-where.el lets you get something at a position where an arbitrary predicate is true (not just a position at the start of a text THING), or move to such a position.

    E.g., function fw-next-thing returns the next THING and its position, and command fw-to-next-thing goes there.

    E.g., this defines a command to move to the beginning of the next sexp:

      (defun to-next-sexp (n)
        "Go to next start of a sexp."
        (interactive "p")
        (fw-to-next-thing 'sexp nil n))
    

    Likewise, for fw-next-where and fw-to-next-where, which look for the next place and some data where some predicate is satisfied.

    See the Commentary in find-where.el.

  • Commands in library isearch-prop.el to search within the text of certain things.

    E.g., isearchp-imenu-non-interactive-function searches only within (or only outside of) definitions of functions that are not commands. isearch-property-forward searches only within text that has (or doesn't have) a given text or overlay property. isearchp-zones-forward searches only within (or only outside) the text of a given set of zones (i.e., within a noncontiguous region).

  • The old library hideif.el lets you hide text that's within ifdefs.

https://www.emacswiki.org/emacs/download/thing-cmds.el

https://www.emacswiki.org/emacs/download/hide-comnt.el

https://www.emacswiki.org/emacs/download/find-where.el

https://www.emacswiki.org/emacs/download/thingatpt%2b.el

https://www.emacswiki.org/emacs/download/isearch-prop.el

[–] [email protected] 1 points 1 year ago

Awesome compilation!! I already start using C-M e/a already mentioned in this post. It's simple and effective. I need to finish reading everything to get a way to move inside one function.