Примечание: отмеченный как общественная Wiki
Я кодирую в энергии.
Я использую мерзавца; и любите мерзавца grep.
У кого-либо есть особенно хороший набор методов / сценарии для использования мерзавца grep в энергии?
Читатели: ответы upvote, включающие энергию + мерзавец grep; ответы downvote, включающие нередакторы Vim и редакторов, обращающихся к внешним инструментам помимо мерзавца grep.
У вас есть это расширение VIM (создано Тимо Хирвонен еще в 2006 году!)
git grep
выполняет поиск шаблона в выбранном в данный момент ветка git.
Это добавляет команду: G
для запуска команды из 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 G нажата.
func GitGrepWord()
normal! "zyiw
call GitGrep('-w -e ', getreg('z'))
endf
nmap <C-x>G :call GitGrepWord()<CR>
Все еще в том же наборе инкапсуляции Git (включая git grep
]) у вас есть:
MinSCM: абстрактный интерфейс для Mercurial / Git / Bazaar , из Takeshi NISHIDA :
См. его Git репо
альтернативный текст http://bitbucket.org/ns9tks/vim-minscm/wiki/log.png
:MinSCMGrep[!] (Default mapping: \sg)
Ищет указанный шаблон и создает | quickfix | список.
Используемые команды SCM ~
- hg:
grep -n
- git:
grep -n -e
- bzr: (недоступно)
Проверьте также fugitive.vim - Обертка Git настолько классная, что должна быть незаконной
(это его официальный тег - line;)), из Тим Поуп (см. проект репозитория Git ):
Он включает, среди многих других команд, одну для 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
У вас также есть этот набор команд vim, из проекта Git 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>)