社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

git grep和vim中的技术

anon • 5 年前 • 729 次点击  

注意:标记为社区wiki

我在VIM中编码。

我用Git;我爱Git Grep。

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30359
 
729 次点击  
文章 [ 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>