helm-ag.el
Introduction
helm-ag.el
provides interfaces of The Silver Searcher with helm.
Features
- Support multiple search tools(ag, the platinum searcher, ack etc)
- Edit search result like wgrep
Screenshot
Requirements
- Emacs 24 or higher
- helm 1.7.7 or higher
- The Silver Searcher 0.29.0 or higher.
Installation
helm-ag
is available on MELPA and MELPA stable
You can install helm-ag
with the following command.
M-x package-install [RET] helm-ag [RET]
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
.
(custom-set-variables
'(helm-follow-mode-persistent t))
Persistent action
You can see file content temporarily by persistent action(C-j
).
helm-ag
Search Tips of 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.
helm-do-ag
)
Pattern contains space(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 long option
Please always use =
separator for using long option. 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
.
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 posion |
C-o |
Jump to current line posion in other window |
g |
Update result |
Sample Configuration
(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
(custom-set-variables
'(helm-ag-base-command "pt -e --nocolor --nogroup"))
ack
(custom-set-variables
'(helm-ag-base-command "ack --nocolor --nogroup"))
sift
(custom-set-variables
'(helm-ag-base-command "sift --no-color -n"))
ripgrep
(custom-set-variables
'(helm-ag-base-command "rg --vimgrep --no-heading"))
NOTE: For pt users
Case using ag
or ack
, helm-do-ag
convert pattern from foo bar
to "(?=.*" foo ".*)(?=.*" bar ".*)"
which patterns matches line which contains both foo
and bar
. But case using pt
, helm-do-ag
does not convert because Golang regexp
(pt
is written in Golang) does not support look-a-head pattern.
So using pt
behaviors is different from ag
when you use such pattern. I suppose there is same problem
if you use search programs which are written in Golang.
Alternatives
ag.el provides M-x grep
interface.
Also it can work without helm.