在vim中有效地使用'git grep'

14

Fugitive.vim允许我运行git grep命令;不幸的是,结果不会存储在quickfix列表中,所以我需要在:Ggrep之后运行:cw才能得到一个易于解析的结果列表。

我想键入:Ggr "def my_function"而不是:

:Ggrep "def my_function"
:cw

如何在我的 .vimrc 文件中定义这个命令:Ggr

编辑

一旦定义了:Ggr命令,我可以将其映射到光标下单词的git grep,这真是太棒了:

nnoremap <C-F> :Ggr <cword><CR>

可能是重复的问题:VIM - 同一行上执行多个命令 - Etheryte
1
请注意,我必须将 :Ggr 参数传递给 :Ggrep... 因此,这不像连续运行两个命令那么简单。 - Régis B.
6
:Ggrep命令会填充quickfix列表,但窗口不会自动打开。也许您想要在任何grep调用之后自动打开quickfix窗口,请按照vim-fugitive FAQ部分的建议使用autocmd QuickFixCmdPost *grep* cwindow - Peter Rincker
3个回答

13
您可以使用<args>符号插入传递给自定义命令的参数:
:command -nargs=+ Ggr execute 'Ggrep' <q-args> | cw

注意:由于:Ggrep命令没有-bar参数,因此无法链接,必须使用:execute

这几乎是完美的:Ggrep命令打开一个需要在运行cw命令前关闭的窗口,因此我必须按<enter>键将其关闭。有什么改进的想法吗? - Régis B.
你可以通过 ... | execute "normal \<CR>" | cw 来模拟按下那个键,或者(也许更容易)尝试 ... | close | cw - Ingo Karkat
似乎不起作用,我仍然看到“按ENTER键继续”消息,这是在执行:Ggrep命令后显示的。 - Régis B.
哦,那个“按回车键继续”的提示,不是一个窗口;我误解了;是的,很难避免。 - Ingo Karkat
很遗憾,不过你的回答已经足够了。 - Régis B.

13

这对我有效:

:command -nargs=+ Ggr execute 'silent Ggrep!' <q-args> | cw | redraw!

太棒了!这真的是对之前答案的改进。 - Régis B.
6
既然只是对我的回答做了微小的修改,你可以将其作为评论添加。许多人认为你所做的不好。请至少记录修改内容及其必要性。 - Ingo Karkat
1
这似乎不再需要了。根据Fugitive的文档,截至2022年,以下命令应该足够:command -nargs=+ Ggr execute 'Ggrep! -q' <q-args> - introiboad

2

在评论中已经提到过,但我认为fugitive.vim网站上推荐的插件解决方案值得单独回答:

autocmd QuickFixCmdPost *grep* cwindow

(from: https://github.com/tpope/vim-fugitive)


这是正确的。但是,这需要在执行:Ggr命令后按一次<return>键,这很不方便。 - Régis B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接