1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286
|
# helm-ag.el
## Introduction
`helm-ag.el` provides interfaces of [The Silver Searcher](https://github.com/ggreer/the_silver_searcher) with helm.
## Features
- Support multiple search tools(ag, [the platinum searcher][pt-link], [ack][ack-link] etc)
- Edit search result like [wgrep](https://github.com/mhayashi1120/Emacs-wgrep)
## Screenshot

## Basic Usage
##### `helm-ag`
Input search word with `ag` command. You can change search directory
with `C-u` prefix.
##### `helm-ag-this-file`
Same as `helm-ag` except to search only current file
##### `helm-do-ag`
Search with `ag` like `helm-do-grep-ag `, `helm-grep-do-git-grep`.
You can specify extra command line option of `ag` with minus prefix(`M--` or `C--`).

##### `helm-do-ag-this-file`
Same as `helm-do-ag` except to search only current file
##### `helm-ag-project-root`
Call `helm-ag` at project root. `helm-ag` seems directory as project root where
there is `.git` or `.hg` or `.svn`.
##### `helm-do-ag-project-root`
Call `helm-do-ag` at project root.
##### `helm-ag-buffers`
Search buffers by `helm-ag`
##### `helm-do-ag-buffers`
Search buffers by `helm-do-ag`
##### `helm-ag-pop-stack`
Move to point before jump
##### `helm-ag-clear-stack`
Clear context stack
## Enable helm-follow-mode by default
Please set `helm-follow-mode-persistent` to non-nil if you want to use `helm-follow-mode` by default. You must set it before loading `helm-ag.el`.
``` lisp
(custom-set-variables
'(helm-follow-mode-persistent t))
```
## Persistent action
You can see file content temporarily by persistent action(`C-j`).
## Search Tips of `helm-ag`
##### Passing command line options and pattern
```
Pattern: -Gmd$ search_pattern
```
Command line options is `-Gmd$` and search pattern is `search_pattern`.
`helm-ag` treats words which starts with `-` as command line option.
##### Pattern contains space(`helm-do-ag`)
```
Pattern: foo\ bar\ baz
```
Search pattern is `foo\ bar\ baz`. You need to escape spaces with backslash.
In `helm-ag`, you need not to escape spaces.
##### Pattern starts with `-`
```
Pattern: -- --count
```
Search pattern is `--count`.
`helm-ag` treats words after `--` as search pattern.
##### Search meta characters as literal
`ag`(`ack`, `pt`) takes Perl compatible PCRE so that you need to escape meta characters
likes brackets, braces, asterisk, when you search them as literals.
##### Use short option
Don't use space between option and its value. For example `-tcpp` is ok, `-t cpp` is not ok.
##### Use long option
Please always use `=` separator for using long option. Don't use space as separator. For example `--ignore=pattern` is ok, `--ignore pattern` is not ok.
## Customize
##### `helm-ag-base-command`(Default: `ag --nocolor --nogroup`)
Base command of `ag`. Windows users should set `--vimgrep` option for using `helm-do-ag`. See [#293](https://github.com/syohex/emacs-helm-ag/issues/293#issuecomment-280850455)
##### `helm-ag-command-option`(Default: `nil`)
Command line option of base command.
##### `helm-ag-insert-at-point`(Default: `nil`)
Insert thing at point as default search pattern, if this value is `non nil`.
You can set the parameter same as `thing-at-point`(Such as `'word`, `symbol` etc).
##### `helm-ag-fuzzy-match`(Default: `nil`)
Enable fuzzy matching.
##### `helm-ag-use-grep-ignore-list`(Default: `nil`)
Use `grep-find-ignored-files` and `grep-find-ignored-directories` as ignore pattern.
They are specified to `--ignore' options."
##### `helm-ag-always-set-extra-option`(Default: `nil`)
Always set extra command line option of `ag` in `helm-do-ag`
if this value is non-nil.
##### `helm-ag-edit-save`(Default: `t`)
Save buffers you edit at editing completed.
##### `helm-ag-use-emacs-lisp-regexp`(Default: `nil`)
Use Emacs Lisp regexp instead of PCRE as pattern.
NOTE: this is very simple conversion.
##### `helm-ag-use-agignore`(Default: `nil`)
Use `.agignore` file at project root if this variable is non nil.
##### `helm-ag-use-temp-buffer`(Default: `nil`)
Use temporary buffer and not open file for persistent action.
##### `helm-ag-ignore-buffer-patterns`(Default: `nil`)
Ignore buffer patterns of buffer search commands.
#### NOTE
`helm` removes `file-line` type feature from 1.6.9. So `helm-ag-source-type` is no longer available.
## Keymap
`helm-ag-map` and `helm-do-ag-map` are inherited by `helm-map`.
| Key | Action |
|:-----------------|:---------------------------------------------------------------------------|
| `C-c o` | Open other window |
| `C-l` | Search in parent directory |
| `C-c C-e` | Switch to edit mode |
| `C-x C-s` | Save ag results to buffer(Ask save buffer name if prefix key is specified) |
| `C-c C-f` | Enable helm-follow-mode |
| `C-c >`, `right` | Move to next file |
| `C-c <`, `left` | Move to previous file |
| `C-c ?` | Show help message |
### Edit mode keymap
| Key | Action |
|:----------|:-----------------|
| `C-c C-c` | Commit changes |
| `C-c C-k` | Abort |
| `C-c C-d` | Mark delete line |
| `C-c C-u` | Unmark |
You can use `next-error` and `previous-error` for seeing file content which
current line indicates.
### Saved buffer keymap
| Key | Action |
|:------|:----------------------------------------------|
| `RET` | Jump to current line position |
| `C-o` | Jump to current line position in other window |
| `g` | Update result |
## Sample Configuration
```lisp
(custom-set-variables
'(helm-ag-base-command "ag --nocolor --nogroup --ignore-case")
'(helm-ag-command-option "--all-text")
'(helm-ag-insert-at-point 'symbol)
'(helm-ag-ignore-buffer-patterns '("\\.txt\\'" "\\.mkd\\'")))
```
## helm-ag.el with other searching tools
`helm-ag.el` can work other searching tools like platinum searcher or ack instead of the silver searcher.
I think the searching tool which supports grep like output, helm-ag can work with it.
#### [the platinum searcher](https://github.com/monochromegane/the_platinum_searcher/)
```lisp
(custom-set-variables
'(helm-ag-base-command "pt -e --nocolor --nogroup"))
```
#### [ack](http://beyondgrep.com/)
```lisp
(custom-set-variables
'(helm-ag-base-command "ack --nocolor --nogroup"))
```
#### [sift](https://sift-tool.org/)
```lisp
(custom-set-variables
'(helm-ag-base-command "sift --no-color -n"))
```
#### [ripgrep](https://github.com/BurntSushi/ripgrep/)
```lisp
(custom-set-variables
'(helm-ag-base-command "rg --no-heading"))
```
#### NOTE: For pt and rg users
When using `ag` or `ack`, `helm-do-ag` convert pattern from `foo bar` to `"(?=.*" foo ".*)(?=.*" bar ".*)"`
which pattern matches line which contains both `foo` and `bar`. But when using `pt` or `rg`, `helm-do-ag`
does not convert the pattern because Golang `regexp`(`pt` is written in Golang)
and rust's `regex` (`rg` is written in rust) does not support look-a-head pattern.
So using `pt` or `rg` behaves differently from `ag` when you use such pattern.
## Alternatives
[ag.el](https://github.com/Wilfred/ag.el) provides `M-x grep` interface.
Also it can work without helm.
[travis-badge]: https://travis-ci.org/syohex/emacs-helm-ag.svg
[travis-link]: https://travis-ci.org/syohex/emacs-helm-ag
[melpa-link]: https://melpa.org/#/helm-ag
[melpa-stable-link]: https://stable.melpa.org/#/helm-ag
[melpa-badge]: https://melpa.org/packages/helm-ag-badge.svg
[melpa-stable-badge]: https://stable.melpa.org/packages/helm-ag-badge.svg
[ack-link]: http://beyondgrep.com/
[pt-link]: https://github.com/monochromegane/the_platinum_searcher
|