从 ag 结果中根据相对目录减少目录

cut down directory against relative directory from ag results

如果用 ag 在像 a/long/long/long/path/to/project/ 这样的长路径目录中搜索,结果列表将包含长路径。有没有办法在结果列表中获取项目路径?

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() {

为什么我用指定的目录路径搜索而不是 cd 并搜索?我用这种方式在 vim 中使用 ag 在项目范围内进行搜索:找到项目路径并将其传递给 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()

如果 ag 在 quickfix window 中生成结果,您可以在 quickfix window 中执行 :cd {path} 以更新显示的路径。您可能需要 :cclose:copen qf window 才能看到简化操作。

当我的 &makeprg 包含诸如 (cd build/path && make target)

之类的内容时,我经常在 :make 之后执行 cd .