Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/Wilfred/deadgrep

fast, friendly searching with ripgrep and Emacs
https://github.com/Wilfred/deadgrep

emacs ripgrep

Last synced: 3 months ago
JSON representation

fast, friendly searching with ripgrep and Emacs

Awesome Lists containing this project

README

        

# Deadgrep: use ripgrep from Emacs ☠️

Deadgrep is the fast, beautiful text search that your Emacs
deserves.

[![Coverage Status](https://coveralls.io/repos/github/Wilfred/deadgrep/badge.svg?branch=master)](https://coveralls.io/github/Wilfred/deadgrep?branch=master) [![MELPA](https://melpa.org/packages/deadgrep-badge.svg)](https://melpa.org/#/deadgrep)

![screenshot](docs/deadgrep_screenshot.png)

**Table of Contents**

- [Usage](#usage)
- [Installation](#installation)
- [Keybindings](#keybindings)
- [Additional interactive commands](#additional-interactive-commands)
- [Minibuffer](#minibuffer)
- [Easy Debugging](#easy-debugging)
- [Features](#features)
- [Super Fast](#super-fast)
- [Context Aware](#context-aware)
- [Easy Filtering](#easy-filtering)
- [Polish](#polish)
- [Beta Features](#beta-features)
- [Alternative Projects](#alternative-projects)
- [Why the name?](#why-the-name)

## Usage

### Installation

1. Install [ripgrep](https://github.com/BurntSushi/ripgrep). You need
version 0.8 or later.

2. Install deadgrep from MELPA (do `M-x package-install`
RET `deadgrep` within Emacs 25.1 or later),
or copy it into your `~/.emacs.d`.

3. (Optional) add deadgrep to a convenient shortcut. I like F5.

``` emacs-lisp
(global-set-key (kbd "") #'deadgrep)
```

### Keybindings

Navigating results:

| Key | Action |
| --- | --- |
| RET | Visit the result, file or push button at point |
| o | Visit the result in another window |
| n and p | Move between search hits |
| M-n and M-p | Move between file headers |

The commands `deadgrep-forward` and `deadgrep-backward` are also
available to move between buttons as well as search hits.

Starting/stopping a search:

| Key | Action |
| --- | --- |
| S | Change the search term |
| T | Cycle through available search types: string, words, regexp |
| C | Cycle through case sensitivity types: smart, sensitive, ignore |
| F | Cycle through file modes: all, type, glob |
| I | Switch to incremental search, re-running on every keystroke |
| D | Change the search directory |
| ^ | Re-run the search in the parent directory |
| g | Re-run the search |
| TAB | Expand/collapse results for a file |
| C-c C-k | Stop a running search |
| C-u | A prefix argument prevents search commands from starting automatically. |

### Additional interactive commands

| Name | Action |
| --- | --- |
| `imenu` | Move between files in a results buffer. |
| `deadgrep-kill-all-buffers` | Kill all open deadgrep buffers. |
| `deadgrep-debug` | In a results buffer, view the `rg` command, output and environment used. |

### Minibuffer

You use the minibuffer to enter a new search term.

You can also reuse a previous search term with M-p in the
minibuffer. To edit the default search term, use M-n.

### Easy Debugging

The easiest way to debug search results is to review the actual `rg` command executed.

Fortunately, the `deadgrep-debug` function makes it easy:

- Move to the deadgrep results buffer.
- Type `M-x deadgrep-debug`.
- Strike `enter`, and the debug buffer will appear.
- Move to the deadgrep debug buffer.

Study the results to review the `rg` command string and other debugging information to assist you.

## Features

### Super Fast

Deadgrep uses ripgrep for extremely fast text searches.

If you change your search settings, deadgrep will immediately re-run
your search.

### Context Aware

Deadgrep works hard to minimise your keystrokes.

**Search term**: If the region is active, deadgrep uses that.

**Search directory**: If your current file is in a VCS repository,
deadgrep uses that for your search directory.

**Regexp and case sensitivity options**: Deadgrep re-uses whatever
settings you used in your last search.

**Globbing and file types**: Deadgrep suggests file types and globbing
options that match the file you started the search from.

**Host**: If you're editing a remote file with Tramp, deadgrep will
search the remote machine. This requires `rg` to be installed on that
machine.

### Easy Filtering

Didn't get the results you wanted? It's easy to change the search
term, search type, or search directory, directly from the results
buffer. Just push the relevant button.

![screenshot](docs/deadgrep_filters.png)

### Polish

Deadgrep uses spinners to give you feedback on whether your search has
finished.

![screenshot](docs/deadgrep_spinner.png)

It highlights regexp syntax according to the syntax accepted by `rg`.

![screenshot](docs/deadgrep_highlight.png)

When navigating to a line that matched, the relevant part of the line
is temporarily highlighted.

![screenshot](docs/deadgrep_highlight_relevant.png)

You can collapse and expand files with `TAB`.

![screenshot](docs/deadgrep_collapsed.png)

Deadgrep handles minified files robustly.

![screenshot](docs/deadgrep_truncated.png)

You can always jump to exactly the position that point is on, even
when searching files that contain tab characters. You can also
navigate to the file itself from the file headings.

## Beta Features

You can now edit files directly from results buffers with `M-x
deadgrep-edit-mode`.

It is currently in beta. Alternatively, package [wgrep](https://github.com/mhayashi1120/Emacs-wgrep)
added support for editing deadgrep buffers in April 2023 via [wgrep-deadgrep](https://melpa.org/#/wgrep-deadgrep).
(One feature unlocked that way is, e.g., the ability to delete a line in edit mode via `C-d`)

## Alternative Projects

I believe that deadgrep is the best tool for doing Emacs text
searches, but there are some other great tools out there. See
[ALTERNATIVES](docs/ALTERNATIVES.md) for a discussion.

## Why the name?

The name "deadgrep" is a pun on "R.I.P. grep", and ripgrep.el was
already taken.

R.I.P wasn't actually the intention of the name "ripgrep" (see [their
FAQ](https://github.com/BurntSushi/ripgrep/blob/master/FAQ.md#what-does-the-rip-in-ripgrep-mean)),
but deadgrep is easy to remember and type.