我想使用Ack(或类似的插件,如果其他东西可以完成这项工作)默认情况下在Vim中搜索我的整个项目,而不仅仅是当前目录。理想情况下,我最终会得到一个像在Sublime中使用Cmd + Shift + F一样的过程。我怎么能这样做?
像CtrlP let g:ctrlp_working_path_mode = 'r'
这样的选项让它在包含像.git
这样的文件的最近的父目录中进行搜索将是完美的。 (https://github.com/kien/ctrlp.vim#basic-options)
答案 0 :(得分:3)
我认为Rooter就是你想要的。例如:
let g:rooter_patterns = ['Rakefile', '.git/']
答案 1 :(得分: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 /命令就是这样:
exec 'Ack! '. pattern . " " . g:projectA_path
pattern
是你传入的参数。然后,将来你可以这样做:
:AckA foo
或
:call AckA("foo")
用于projectA中的快速grepping / acking。
我没想到更简单的方法。很高兴看到是否有更好的解决方案。
答案 2 :(得分: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>
答案 3 :(得分:0)
我的.vimrc
中有这行:
cnoreabbrev ack cd ~/your-project <bar> Ack! <Space>
每当您键入:ack
并点击空格时,其余的都会添加到命令行中,并且您可以添加关键字。