105 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
| git-jump
 | |
| ========
 | |
| 
 | |
| Git-jump is a script for helping you jump to "interesting" parts of your
 | |
| project in your editor. It works by outputting a set of interesting
 | |
| spots in the "quickfix" format, which editors like vim can use as a
 | |
| queue of places to visit (this feature is usually used to jump to errors
 | |
| produced by a compiler). For example, given a diff like this:
 | |
| 
 | |
| ------------------------------------
 | |
| diff --git a/foo.c b/foo.c
 | |
| index a655540..5a59044 100644
 | |
| --- a/foo.c
 | |
| +++ b/foo.c
 | |
| @@ -1,3 +1,3 @@
 | |
|  int main(void) {
 | |
| -  printf("hello word!\n");
 | |
| +  printf("hello world!\n");
 | |
|  }
 | |
| -----------------------------------
 | |
| 
 | |
| git-jump will feed this to the editor:
 | |
| 
 | |
| -----------------------------------
 | |
| foo.c:2: printf("hello word!\n");
 | |
| -----------------------------------
 | |
| 
 | |
| Obviously this trivial case isn't that interesting; you could just open
 | |
| `foo.c` yourself. But when you have many changes scattered across a
 | |
| project, you can use the editor's support to "jump" from point to point.
 | |
| 
 | |
| Git-jump can generate four types of interesting lists:
 | |
| 
 | |
|   1. The beginning of any diff hunks.
 | |
| 
 | |
|   2. The beginning of any merge conflict markers.
 | |
| 
 | |
|   3. Any grep matches.
 | |
| 
 | |
|   4. Any whitespace errors detected by `git diff --check`.
 | |
| 
 | |
| 
 | |
| Using git-jump
 | |
| --------------
 | |
| 
 | |
| To use it, just drop git-jump in your PATH, and then invoke it like
 | |
| this:
 | |
| 
 | |
| --------------------------------------------------
 | |
| # jump to changes not yet staged for commit
 | |
| git jump diff
 | |
| 
 | |
| # jump to changes that are staged for commit; you can give
 | |
| # arbitrary diff options
 | |
| git jump diff --cached
 | |
| 
 | |
| # jump to merge conflicts
 | |
| git jump merge
 | |
| 
 | |
| # jump to all instances of foo_bar
 | |
| git jump grep foo_bar
 | |
| 
 | |
| # same as above, but case-insensitive; you can give
 | |
| # arbitrary grep options
 | |
| git jump grep -i foo_bar
 | |
| 
 | |
| # use the silver searcher for git jump grep
 | |
| git config jump.grepCmd "ag --column"
 | |
| --------------------------------------------------
 | |
| 
 | |
| 
 | |
| Related Programs
 | |
| ----------------
 | |
| 
 | |
| You can accomplish some of the same things with individual tools. For
 | |
| example, you can use `git mergetool` to start vimdiff on each unmerged
 | |
| file. `git jump merge` is for the vim-wielding luddite who just wants to
 | |
| jump straight to the conflict text with no fanfare.
 | |
| 
 | |
| As of git v1.7.2, `git grep` knows the `--open-files-in-pager` option,
 | |
| which does something similar to `git jump grep`. However, it is limited
 | |
| to positioning the cursor to the correct line in only the first file,
 | |
| leaving you to locate subsequent hits in that file or other files using
 | |
| the editor or pager. By contrast, git-jump provides the editor with a
 | |
| complete list of files and line numbers for each match.
 | |
| 
 | |
| 
 | |
| Limitations
 | |
| -----------
 | |
| 
 | |
| This script was written and tested with vim. Given that the quickfix
 | |
| format is the same as what gcc produces, I expect emacs users have a
 | |
| similar feature for iterating through the list, but I know nothing about
 | |
| how to activate it.
 | |
| 
 | |
| The shell snippets to generate the quickfix lines will almost certainly
 | |
| choke on filenames with exotic characters (like newlines).
 | |
| 
 | |
| Contributing
 | |
| ------------
 | |
| 
 | |
| Bug fixes, bug reports, and feature requests should be discussed on the
 | |
| Git mailing list <git@vger.kernel.org>, and cc'd to the git-jump
 | |
| maintainer, Jeff King <peff@peff.net>.
 |