神刀安全网

Emacs, “dumb” jump to definition

dumb-jump

Emacs, “dumb” jump to definition Emacs, “dumb” jump to definition Emacs, “dumb” jump to definition Emacs, “dumb” jump to definition Emacs, “dumb” jump to definition

Emacs, “dumb” jump to definition

About

Dumb Jumpis an Emacs "jump to definition" package with support for multiple programming languages that favors "just working". This means minimal — and ideally zero — configuration with absolutely no stored indexes (TAGS) or persistent background processes.

How it works

Dumb Jump usesThe Silver Searcher ag (and falls back to grep ) to find potential definitions of a function or variable under point. It uses a set of regular expressions based on the file extension, or major-mode , of the current buffer. Currently the ag matches are run through a shared set of heuristic methods to find the best candidate to jump to. If it can’t decide it will present the user with a list in a pop-menu.

Success Rate

For the currentlysupported languagesit seems to do a good job of finding what you want. If you find a case where it does not work as expected do not hesitate toopen an issue. It can be slow if it needs to use grep and/or a project is large. Although it can be sped up by installing ag and/or creating a .dumbjump file in your project’s root directory with paths that should be excluded (see configuration).

Supported Languages

There is currently basic support for the following languages:

  • JavaScript
  • Emacs Lisp
  • Python
  • Go
  • PHP
  • Ruby
  • Clojure
  • Faust
  • R

If you have any issues with the existing languages, or you want support for another one, then pleaseopen an issue. PRs are also welcome.

Why?

I wanted "jump to definition" functionality to "just work" in emacs. I use IntelliJ for Java and this functionality is basically the only thing I miss when I switch back to emacs for work in other languages. There are certainly other packages that offer this type of functionality, but they all require significantly more configuration and are often limited to a particular language. An alternative may be worth setting up if you are in a specific project or language often (seealternatives).

Installing

The recommended way to install Dumb Jump is via package.el . It’s available on MELPA : M-x package-install dumb-jump

Installing ag

Dumb Jump performs best with The Silver Searcher ag installed on your system. Please see theirinstall instructions.

Usage

Basic

Adding (dumb-jump-mode) to your .emacs will enable the key bindings for two interactive Dumb Jump functions:

  • dumb-jump-go C-M g core functionality. Attempts to jump to the definition for the thing under point
  • dumb-jump-back C-M p jumps back to where you were when you jumped. These are chained so if you go down a rabbit hole you can get back out or where you want to be.
  • dumb-jump-quick-look C-M q like dumb-jump-go but shows tooltip with file , line , and context

Configuration

Excluding project directories

Dumb Jump will automatically look for a project root. If it’s not finding one then either put a .dumbjump file in your project root and optionally add excluded directories to make it faster.

Example .dumbjump

-tests -node_modules -build -images +../some-lib/src +/usr/lib/src 

.emacs options

  • (setq dumb-jump-default-project "~/code") to change default project if one is not found (defaults to ~ )
  • (setq dumb-jump-quiet t) if Dumb Jump is too chatty.
  • To support more languages and/or definition types use add-to-list on dumb-jump-find-rules (see source code).
  • (add-hook 'dumb-jump-after-jump-hook 'some-function) to execute code after you jump

Contributing

Feedback is very welcome via GitHub issues. I will positively consider supporting other languages either via issue request or PR. If submitting a PR then please add tests as well.

Running Tests

RequiresCask.

cd /path/to/dumb-jump cask make test 

Alternatives

Here is a list of potential alternatives packages for emacs:

  • Tags supports multiple languages
  • GNU Global supports multiple languages
  • Tern for JavaScript
  • elpy for Python
  • robe for Ruby

Most of these were sourced from this emacs StackExchange answer .

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Emacs, “dumb” jump to definition

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址