6

默认情况下,我想使用 Ack(或类似的插件,如果其他东西可以完成这项工作)在 Vim 中搜索我的整个项目,而不仅仅是当前目录。理想情况下,我最终会得到一个类似于在 Sublime 中使用 Cmd+Shift+F 的过程。我怎样才能做到这一点?

像 CtrlP 这样的选项let g:ctrlp_working_path_mode = 'r'可以让它在最近的包含类似文件的父目录中搜索,这.git将是完美的。( https://github.com/kien/ctrlp.vim#basic-options )

4

4 回答 4

3

我认为Rooter是你想要的。例如:

let g:rooter_patterns = ['Rakefile', '.git/']
于 2013-10-15T21:01:02.333 回答
2

我认为Ack(或 grep/vimgrep)无法检测到您的“项目根目录”。如果您经常从事多个项目,则可以将此块添加到您的vimrc

let g:projectA_path="/path/to/A"
let g:projectB_path="/path/to/B"
let g:projectC_path="/path/to/C"

还定义了一些函数/命令,例如AckA, AckB, AckC... 基本上 func/command 就可以了:

exec 'Ack! '. pattern . " " . g:projectA_path

thepattern是您传入的参数。那么,将来,您可以执行以下操作:

:AckA foo

或者

:call AckA("foo")

用于在 projectA 中快速 grepping/acking。

我没有想到更简单的方法来做到这一点。很高兴看到是否有更好的解决方案。

于 2013-10-15T10:09:30.603 回答
1

大多数时候我不需要 cd 项目根目录,而是留在同一个工作目录中。因此,基于 Kent 的回答,有一个更简单的解决方案,无需 cd 项目根目录,安装其他插件并使用 ag:

let g:ackprg = 'ag --vimgrep --smart-case'

function! Find_git_root()
  return system('git rev-parse --show-toplevel 2> /dev/null')[:-2]
endfunction

command! -nargs=1 Ag execute "Ack! <args> " . Find_git_root()

并使用它调用:Ag <keyword>

于 2018-09-02T15:41:32.757 回答
0

我在我的.vimrc

cnoreabbrev ack cd ~/your-project <bar> Ack! <Space>

每当您键入:ack并点击空格时,其余部分将添加到命令行中,您可以添加关键字。

于 2019-10-31T07:00:29.750 回答