2016-10-21 4 views
0

Если поиск в каталоге длинного пути, например 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() { 

Почему я искать с путем каталога, определенным вместо 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, вы можете сделать :cd {path} в QuickFix окне, чтобы обновить пути представлены. Возможно, вам понадобится :cclose и :copen окно qf, чтобы увидеть упрощение.

Я часто делать cd . после :make, когда мой &makeprg содержит такие вещи, как (cd build/path && make target)

+0

, но мое решение пригласить новый вопрос. Я возвращаюсь к последнему 'pwd' после поиска, теперь, если я открою файл из списка quickfix, он создаст новый файл в текущем' pwd' вместо того, чтобы открывать файл в проекте. Ах ... – tjfdfs