git-grep和vim中的技术
注意:标记为社区wiki 我用vim编码 我使用git;我爱吉特·格雷普 有没有人有一套特别好的在vim中使用git grep的技术/脚本 读者:请对涉及vim+git grep的答案进行投票;请对涉及非vim编辑器以及除git grep之外的外部工具的编辑器的答案进行向下投票。您确实有这个答案(由Timo Hirvonen在2006年创建!)git-grep和vim中的技术,git,vim,grep,Git,Vim,Grep,注意:标记为社区wiki 我用vim编码 我使用git;我爱吉特·格雷普 有没有人有一套特别好的在vim中使用git grep的技术/脚本 读者:请对涉及vim+git grep的答案进行投票;请对涉及非vim编辑器以及除git grep之外的外部工具的编辑器的答案进行向下投票。您确实有这个答案(由Timo Hirvonen在2006年创建!) git grep在当前选定的git分支中搜索模式。 这将添加:G命令以从Vim中运行该命令 您还可以从Git项目中获得这组vim命令。 (灵感来源于)
git grep
在当前选定的git分支中搜索模式。这将添加
:G
命令以从Vim中运行该命令
您还可以从Git项目中获得这组vim命令。
(灵感来源于)
let g:gitgreprg=“git\\grep\\\-n”
功能!GitGrep(args)
设grepprg_bak=&grepprg
exec“set grepprg=”。g:Gitgreprg
执行“静默!grep”。a:args
博特里特科本
让&grepprg=grepprg\u bak
执行官“重画!”
端功能
功能!Gitgrepad(args)
设grepprg_bak=&grepprg
exec“set grepprg=”。g:Gitgreprg
执行“静默!格雷帕德”。a:args
博特里特科本
让&grepprg=grepprg\u bak
执行官“重画!”
端功能
功能!LGitGrep(args)
设grepprg_bak=&grepprg
exec“set grepprg=”。g:Gitgreprg
执行“silent!lgrep”。a:args
博特利特·洛本
让&grepprg=grepprg\u bak
执行官“重画!”
端功能
功能!LGitGrepAdd(args)
设grepprg_bak=&grepprg
exec“set grepprg=”。g:Gitgreprg
执行“静默!lgrepadd”。a:args
博特利特·洛本
让&grepprg=grepprg\u bak
执行官“重画!”
端功能
命令-nargs=*-complete=文件GitGrep调用GitGrep()
命令-nargs=*-complete=文件gitgrepad调用gitgrepad()
命令-nargs=*-complete=文件LGitGrep调用LGitGrep()
命令-nargs=*-complete=文件LGitGrepAdd调用LGitGrepAdd()
同时检查(这是它的官方标签行;)),来自(请参阅): 它包括许多其他命令,其中一个用于
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
调用s:command(“-bar-bang-nargs=?-complete=customlist,s:EditComplete-Ggrep:executes:Grep(0,)”)
调用s:command(“-bar-bang-nargs=*-complete=customlist,s:EditComplete-Glog:executes:Log('grep',)”)
功能!s:Grep(bang,arg)中止
设grepprg=&grepprg
设grepformat=&grepformat
设cd=exists('*haslocaldir')&&haslocaldir()?'lcd':'cd'
let dir=getcwd()
尝试
执行cd'`=s:repo().tree()`'
let&grepprg=s:repo().git_命令('--no pager',grep','-n')
let&grepformat='%f:%l:%m'
exe'grep!'。答:arg
let list=getqflist()
输入列表
如果bufname(entry.bufnr)=~':'
让entry.filename=s:repo().translate(bufname(entry.bufnr))
解开!entry.bufnr
elseif a:arg=~\'\%(^\\\\\)--cached\>'
让entry.filename=s:repo().translate(':0:'.bufname(entry.bufnr))
解开!entry.bufnr
恩迪夫
外循环
调用setqflist(列表,'r')
如果!a:砰&!空(列表)
返回“cfirst”
其他的
返回“”
恩迪夫
最后
let&grepprg=grepprg
let&grepformat=grepformat
执行cd。“`=dir`”
末日
端功能
仍然在同一组Git封装中(包括Git grep
),您有:
,发件人:看他的 搜索指定的模式并创建|快速修复|列表 使用的SCM命令~
- hg:
grep-n
- git:
grep-n-e
- bzr:(不可用)
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
为光标下的单词运行grep
:G运行grep
:Gi以不区分大小写的方式运行grep
只需将要点的内容添加到您的
~/.vimrc
文件中这太棒了。你能在这上面贴更多/你所有的东西吗?即使你发布了9条“无用”的vim/git grep接口行,我使用的1个技巧也是值得的。@anon:根据要求添加了另一个vim插件(请参见我的第二个答案),当我使用时,这个GitGrep,它首先隐藏我的vim屏幕,显示git grep的结果,然后在我按下一个键之后,在第一行把我扔回vim——有没有办法跳到第一行(并隐藏git grep输出)@anon:我不确定,但我发现了另一个vim git封装,值得一看。请看下面我的第三个答案。哇,-w“单词”匹配是因为它拒绝与单词的子部分匹配吗?太棒了。这应该得到更多的+1+1,因为我以前没有意识到git grep的价值有多大!!(我使用的是ack grep
)
func GitGrepWord()
normal! "zyiw
call GitGrep('-w -e ', getreg('z'))
endf
nmap <C-x>G :call GitGrepWord()<CR>
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>)
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
:MinSCMGrep[!] (Default mapping: \sg)
<C-x><C-x> runs grep for the word under the cursor
:G <word> runs grep
:Gi <word> runs grep as case-insensitive