Py学习  »  Git

git grep和vim中的技术

anon • 5 年前 • 766 次点击  

注意:标记为社区wiki

我在VIM中编码。

我用Git;我爱Git Grep。

有没有人有一套特别好的技术/脚本在VIM内部使用GitGrep?

读者:请对涉及vim+git grep的答案进行投票;请对涉及非vim编辑器的答案进行投票,并对涉及git grep之外的外部工具的编辑器进行投票。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30359
 
766 次点击  
文章 [ 5 ]  |  最新文章 5 年前
ivanxuu
Reply   •   1 楼
ivanxuu    7 年前

我找到了一个 gist 开放的结果来自 git grep 在QuickFix窗口中跳跃:

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

只需将要点的内容添加到 ~/.vimrc 文件

VonC
Reply   •   2 楼
VonC    14 年前

您还拥有来自git项目的这组vim命令 git grep vim ,从 tjennings .
(灵感来自 ack.vim : Plugin for the Perl module / CLI script '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>)
VonC
Reply   •   3 楼
VonC    14 年前

仍在同一组Git封装中(包括 git grep 你有:

MinSCM : An abstract front-end for Mercurial/Git/Bazaar ,来自 Takeshi NISHIDA :
看到他的 Git repo

alt text http://bitbucket.org/ns9tks/vim-minscm/wiki/log.png

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

搜索指定的模式并创建QuickFix_列表。

使用的SCM命令~

  • 汞: grep -n
  • GIT: grep -n -e
  • BZR:(不可用)
VonC
Reply   •   4 楼
VonC    14 年前

也检查 fugitive.vim - A Git wrapper so awesome, it should be illegal
(这是它的官方标签行;)来自 Tim Pope (见 Git repo project ):

它包括许多其他命令,其中一个用于 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
VonC
Reply   •   5 楼
VonC    14 年前

你有这个吗 VIM extension (由 蒂莫希尔沃宁 回到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 被按下。

func GitGrepWord()
  normal! "zyiw
  call GitGrep('-w -e ', getreg('z'))
endf
nmap <C-x>G :call GitGrepWord()<CR>