注意:标记为社区维基
我在vim中编码。
我用git;并且喜欢git grep。
有没有人在vim中使用git grep有一套特别好的技巧/脚本?
读者:请upvote涉及vim + git grep的答案;请关注非vim编辑的答案,以及除git grep之外引用外部工具的编辑。
答案 0 :(得分:9)
同时检查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
答案 1 :(得分:7)
你确实有这个VIM extension(由 Timo Hirvonen 创建于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'
加法:
当按下 Ctrl + X G 时,以下添加将对光标下的单词运行
git grep
。
func GitGrepWord()
normal! "zyiw
call GitGrep('-w -e ', getreg('z'))
endf
nmap <C-x>G :call GitGrepWord()<CR>
答案 2 :(得分:2)
仍然在同一套Git封装中(包括git grep
),你有:
alt text http://bitbucket.org/ns9tks/vim-minscm/wiki/log.png
:MinSCMGrep[!] (Default mapping: \sg)
搜索指定的图案并创建| quickfix |列表。
使用过的SCM命令〜
- hg:
grep -n
- git:
grep -n -e
- bzr :(不可用)
答案 3 :(得分:1)
您还可以从git grep vim的Git项目 tjennings 获得这组vim命令。
(灵感来自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>)
答案 4 :(得分:0)
我发现gist会在快速修正窗口中打开来自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
文件