Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git-grep和vim中的技术_Git_Vim_Grep - Fatal编程技术网

git-grep和vim中的技术

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命令。 (灵感来源于)

注意:标记为社区wiki

我用vim编码

我使用git;我爱吉特·格雷普

有没有人有一套特别好的在vim中使用git grep的技术/脚本

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

您确实有这个答案(由Timo Hirvonen在2006年创建!)

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:(不可用)
我在quickfix窗口中找到了一个打开的结果,该结果来自于
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