2016-10-21 45 views
0

如果使用ag搜索类似a/long/long/long/path/to/project/的长路径目录,结果列表将包含长路径。有没有办法在结果列表中获取项目路径?从ag结果中删除相对目录下的目录

例结果ag test a/long/long/long/path/to/project/列表:

a/long/long/long/path/to/project/test.txt: test..... 
a/long/long/long/path/to/project/js/test2.js: test: function() { 

什么期望:

test.txt: test..... 
js/test2.js: test: function() { 

为什么我specfied目录路径,而不是cd和搜索搜索?我使用这种方法在vim中进行项目范围搜索:找到项目路径并将其传递给vim命令,该命令将使用ag以给定路径进行搜索。

解决方案

PS:我用Plug 'mhinz/vim-grepper

function! VimGrepperConfig() 
    function! s:ag_at_project_root(keyword) 
     let root = s:find_root() 
     if !empty(root) 
      execute 'cd' root 
      execute 'GrepperAg' a:keyword 
      execute 'cd -' 
     else 
      execute 'GrepperAg' a:keyword 
     endif 
    endfunction 
    command! -nargs=1 AgAtProjectRoot call s:ag_at_project_root('<args>') 
    " ag search 
    no <Leader>/ :AgAtProjectRoot 
endfunction 
call VimGrepperConfig() 

回答

2

如果ag产生其结果在quickfix窗口中,可以在quickfix窗口做一个:cd {path}更新提出的路径。您可能需要:cclose:copen qf窗口才能看到简化操作。

我经常做一个cd .:make当我&makeprg包含之类的东西(cd build/path && make target)

+0

但我的解决办法邀请一个新的问题。我搜索后切换回最后一个'pwd',现在如果我从quickfix列表中打开文件,它将在当前'pwd'创建一个新文件,而不是打开项目中的文件。啊... – tjfdfs