When we want to find out where a method is used across the whole project, how do we do that in Nvim? Various tools are available, for example, ack, ag or rg.
These are the 3 most popular tools to use. In the following post, I will introduce how to install and use these packages in Neovim (Nvim).
Suppose that we want to install it to $HOME/tools/bin, you can use the
following install command:
# directory ~/tools/bin must exist
curl https://beyondgrep.com/ack-2.24-single-file > ~tools/bin/ack
# make it executable
chmod u+x ~/tools/bin/ackAdd ack to PATH variable in .bash_profile:
export PATH=$HOME/tools/bin:$PATHThen source .bash_profile to make the change take effect:
source ~/.bash_profile`.I have found an exceptional tool for this task. It is called The Silver Searcher, AKA, ag.
Please follow the official guide on how to install this tool.
Ripgrep is also a great tool for searching patterns. It seems that rg is faster than both ack and ag. So it is also worth a trial.
Follow the offical guide on installing this tools.
You can use these tools directly on the command line. If you want to use it with Vim, you also need to use a front end1 for it.
To use ack inside Nvim, we also need to install ack.vim:
# using vim-plug to install this package
Plug 'mileszs/ack.vim'By default, ack.vim use ack to search for patterns. If you have installed both ag and rg. You can tell ack.vim to use them instead, with a preference for rg.
" Prefer rg > ag > ack
" https://hackercodex.com/guide/vim-search-find-in-project/
if executable('rg')
let g:ackprg = 'rg -S --no-heading --vimgrep'
elseif executable('ag')
let g:ackprg = 'ag --vimgrep'
endifIn Nvim normal mode, use :Ack {PATTERN} [{PATH}] to search {PATTERN}
recursively under directory {PATH}. If you omit the {PATH} parameter, the
default path is the current path.
Ack.vim will open the first file that matches. If you do not want this
behaviour, you can use :Ack! instead. Or, use the following setting in your
Nvim config:
cnoreabbrev Ack Ack!
nnoremap <Leader>a :Ack!<Space>It adds a custom shortcut for the :Ack! command. For more information, see
the ack.vim documentation.
There is high chance that you may have installed fzf and fzf.vim. Then You do not need to install ack.vim. fzf.vim has built-in support for ag and rg.
Both fzf and fzf.vim is easy to install. After installation, you can use :Ag PATTERN or rg PATTERN to search for keyword PATTERN under your current
root directory. The search speed is quite fast. Enjoy~
Recently, I have switched from fzf to Leaderf, which is also a great fuzzy find tool. To use ripgrep with leaderf, you can use the following command:
:Leaderf rg PATTERNUpdate history:
By front end, I mean that some Nvim plugin which will invoke this command for you. ↩︎
When we want to find out where a method is used across the whole project, how do we do that in Nvim? Various tools are available, for example, ack, ag or rg.
These are the 3 most popular tools to use. In the following post, I will introduce how to install and use these packages in Neovim (Nvim).
Suppose that we want to install it to $HOME/tools/bin, you can use the
following install command:
# directory ~/tools/bin must exist
curl https://beyondgrep.com/ack-2.24-single-file > ~tools/bin/ack
# make it executable
chmod u+x ~/tools/bin/ackAdd ack to PATH variable in .bash_profile:
export PATH=$HOME/tools/bin:$PATHThen source .bash_profile to make the change take effect:
source ~/.bash_profile`.I have found an exceptional tool for this task. It is called The Silver Searcher, AKA, ag.
Please follow the official guide on how to install this tool.
Ripgrep is also a great tool for searching patterns. It seems that rg is faster than both ack and ag. So it is also worth a trial.
Follow the offical guide on installing this tools.
You can use these tools directly on the command line. If you want to use it with Vim, you also need to use a front end1 for it.
To use ack inside Nvim, we also need to install ack.vim:
# using vim-plug to install this package
Plug 'mileszs/ack.vim'By default, ack.vim use ack to search for patterns. If you have installed both ag and rg. You can tell ack.vim to use them instead, with a preference for rg.
" Prefer rg > ag > ack
" https://hackercodex.com/guide/vim-search-find-in-project/
if executable('rg')
let g:ackprg = 'rg -S --no-heading --vimgrep'
elseif executable('ag')
let g:ackprg = 'ag --vimgrep'
endifIn Nvim normal mode, use :Ack {PATTERN} [{PATH}] to search {PATTERN}
recursively under directory {PATH}. If you omit the {PATH} parameter, the
default path is the current path.
Ack.vim will open the first file that matches. If you do not want this
behaviour, you can use :Ack! instead. Or, use the following setting in your
Nvim config:
cnoreabbrev Ack Ack!
nnoremap <Leader>a :Ack!<Space>It adds a custom shortcut for the :Ack! command. For more information, see
the ack.vim documentation.
There is high chance that you may have installed fzf and fzf.vim. Then You do not need to install ack.vim. fzf.vim has built-in support for ag and rg.
Both fzf and fzf.vim is easy to install. After installation, you can use :Ag PATTERN or rg PATTERN to search for keyword PATTERN under your current
root directory. The search speed is quite fast. Enjoy~
Recently, I have switched from fzf to Leaderf, which is also a great fuzzy find tool. To use ripgrep with leaderf, you can use the following command:
:Leaderf rg PATTERNUpdate history:
By front end, I mean that some Nvim plugin which will invoke this command for you. ↩︎