How can I use meta-dot (M-.) in python with emacs?
The following will index your current project
find . -type f -name '*.py' | xargs etags
But if you want to index your imported libs. You first activate your virtualenv. Then use which
python to detect where your libs are and then pipe them to etags.
workon my-project # if using virtualenvwrappwer
source bin/activate # if using virtualenv
find ${$(which python)/\/bin\/python/} -type f -name '*.py' | xargs etags
Most of the answers mentioned here are outdated. A simple solution is to use elpy for M-.
without etags(which requires additional work).
Install elpy as mentioned here.
M-x package-install elpy
and then install python packages
$ sudo pip install rope jedi
Restart emacs , open any python file and run M-.
Elpy is fully documented, you can read about M-.
here.
M-. normally runs the "find-tag
" function.
You should create a TAGS file of your python source files. Then you "visit-tags-table
" before doing a M-.
That way, Emacs will jump to all the definitions of the tag. Type C-u M-. to jump the next definition of your tag. See find-tag documentation for help. Consult Emacs help to know how to create a TAGS file from python source files.
You can for example use Exuberant Ctags for creating the TAGS file.
Go to the root directory of your python files and do this :
ctags -e -R .
A TAGS file is normally created at the root directory of the project.
To avoid the -e you can use etags and with a find you recursively add the py file:
find . -type f -name '*.py' | xargs etags