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 !
Here are some ways to move around. The first two are in vanilla Emacs. (There are
previous
functions corresponding to thenext
functions mentioned.)C-M-e
andC-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 usenext-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 requireshide-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 (unlikenext-visible-thing
, which moves to its end).Requires libraries
find-where.el
andthingatpt+.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 commandfw-to-next-thing
goes there.E.g., this defines a command to move to the beginning of the next sexp:
Likewise, for
fw-next-where
andfw-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 withinifdef
s.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
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.