методы в git grep и vim - PullRequest
       10

методы в git grep и vim

15 голосов
/ 10 марта 2010

Примечание: помечено как вики сообщества

Я кодирую в vim.

Я использую Git; и люблю мерзавец греп.

Есть ли у кого-нибудь особенно хороший набор техник / скриптов для использования git grep внутри vim?

Читатели: пожалуйста, ответьте на вопросы, касающиеся vim + git grep; Пожалуйста, уменьшите число ответов, касающихся не vim редакторов и редакторов, ссылающихся на внешние инструменты, кроме git grep.

Ответы [ 5 ]

9 голосов
/ 10 марта 2010

Проверьте также fugitive.vim - Обертка Git настолько классная, она должна быть незаконной
(это его официальный тэг;)) от Тим Папа (см. проект репозитория Git ):

Он включает, среди многих других команд, одну для git grep:

call s:command("-bar -bang -nargs=? -complete=customlist,s:EditComplete Ggrep :execute s:Grep(<bang>0,<q-args>)")
call s:command("-bar -bang -nargs=* -complete=customlist,s:EditComplete Glog :execute s:Log('grep<bang>',<f-args>)")

function! s:Grep(bang,arg) abort
  let grepprg = &grepprg
  let grepformat = &grepformat
  let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd '
  let dir = getcwd()
  try
    execute cd.'`=s:repo().tree()`'
    let &grepprg = s:repo().git_command('--no-pager', 'grep', '-n')
    let &grepformat = '%f:%l:%m'
    exe 'grep! '.a:arg
    let list = getqflist()
    for entry in list
      if bufname(entry.bufnr) =~ ':'
        let entry.filename = s:repo().translate(bufname(entry.bufnr))
        unlet! entry.bufnr
      elseif a:arg =~# '\%(^\| \)--cached\>'
        let entry.filename = s:repo().translate(':0:'.bufname(entry.bufnr))
        unlet! entry.bufnr
      endif
    endfor
    call setqflist(list,'r')
    if !a:bang && !empty(list)
      return 'cfirst'
    else
      return ''
    endif
  finally
    let &grepprg = grepprg
    let &grepformat = grepformat
    execute cd.'`=dir`'
  endtry
endfunction
7 голосов
/ 10 марта 2010

У вас есть расширение VIM (созданное Тимо Хирвоненом в 2006 году!)

git grep <pattern> ищет шаблон в текущей выбранной ветви git.
Это добавляет команду :G <pattern> для запуска команды из Vim.

func GitGrep(...)
  let save = &grepprg
  set grepprg=git\ grep\ -n\ $*
  let s = 'grep'
  for i in a:000
    let s = s . ' ' . i
  endfor
  exe s
  let &grepprg = save
endfun
command -nargs=? G call GitGrep(<f-args>)

Вы также можете ограничить поиск файлами, соответствующими шаблону (git будет выполнять поиск по шаблону):

:G <pattern> -- '*.c'

Дополнения:

Следующее дополнение будет запускаться git grep для слова под курсором при нажатии Ctrl + X G .

func GitGrepWord()
  normal! "zyiw
  call GitGrep('-w -e ', getreg('z'))
endf
nmap <C-x>G :call GitGrepWord()<CR>
2 голосов
/ 10 марта 2010

Все еще в том же наборе инкапсуляции Git (включая git grep), у вас есть:

MinSCM: абстрактный интерфейс для Mercurial / Git / Bazaar , от Такеши Нишида :
Смотрите его Git репо

альтернативный текст http://bitbucket.org/ns9tks/vim-minscm/wiki/log.png

:MinSCMGrep[!]                  (Default mapping: \sg)

Ищет указанный шаблон и создает | quickfix | список.

Использованные команды SCM ~

  • рт.ст .: grep -n
  • git: grep -n -e
  • bzr: (недоступно)
1 голос
/ 10 марта 2010

У вас также есть этот набор команд vim из проекта Git git grep vim , из tjennings .
(вдохновлено ack.vim: плагин для модуля Perl / скрипта CLI 'ack' из Miles Sterrett )

let g:gitgrepprg="git\\ grep\\ -n"

function! GitGrep(args)
    let grepprg_bak=&grepprg
    exec "set grepprg=" . g:gitgrepprg
    execute "silent! grep " . a:args
    botright copen
    let &grepprg=grepprg_bak
    exec "redraw!"
endfunction

function! GitGrepAdd(args)
    let grepprg_bak=&grepprg
    exec "set grepprg=" . g:gitgrepprg
    execute "silent! grepadd " . a:args
    botright copen
    let &grepprg=grepprg_bak
    exec "redraw!"
endfunction

function! LGitGrep(args)
    let grepprg_bak=&grepprg
    exec "set grepprg=" . g:gitgrepprg
    execute "silent! lgrep " . a:args
    botright lopen
    let &grepprg=grepprg_bak
    exec "redraw!"
endfunction

function! LGitGrepAdd(args)
    let grepprg_bak=&grepprg
    exec "set grepprg=" . g:gitgrepprg
    execute "silent! lgrepadd " . a:args
    botright lopen
    let &grepprg=grepprg_bak
    exec "redraw!"
endfunction

command! -nargs=* -complete=file GitGrep call GitGrep(<q-args>)
command! -nargs=* -complete=file GitGrepAdd call GitGrepAdd(<q-args>)
command! -nargs=* -complete=file LGitGrep call LGitGrep(<q-args>)
command! -nargs=* -complete=file LGitGrepAdd call LGitGrepAdd(<q-args>)
0 голосов
/ 09 сентября 2016

Я нашел гист , который открывает результаты из git grep в окне быстрого исправления для перехода:

<C-x><C-x> runs grep for the word under the cursor
:G <word> runs grep 
:Gi <word> runs grep as case-insensitive

Просто добавьте содержание файла в ваш ~/.vimrc файл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...