vimack

Search whole project by default with Vim/Ack


I would like to use Ack (or similar plugin if something else can do the job) to search my whole project in Vim by default, rather than just the current directory. Ideally I'd end up with a process that works like using Cmd+Shift+F in Sublime. How can I do this?

An option like CtrlP's let g:ctrlp_working_path_mode = 'r' that makes it search within the nearest parent directory that contains a file like .git would be perfect. (https://github.com/kien/ctrlp.vim#basic-options)


Solution

  • I don't think Ack (or grep/vimgrep) can detect your "project root". If you often work on several projects, you could add this block in your vimrc:

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

    also define some functions/commands, like AckA, AckB, AckC... basically the func/command just does:

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

    the pattern is the argument you passed in. then, in future, you could do:

    :AckA foo
    

    or

    :call AckA("foo")
    

    for quick grepping/acking in projectA.

    I didn't think of a simpler way to do it. glad to see if there is better solution.