Заставляем git grep эффективно работать в vim

Fugitive.vim позволяет мне запускать git grep команды; к сожалению, результаты не сохраняются в списке quickfix, поэтому мне нужно запустить :cw после :Ggrep, чтобы получить легко анализируемый список результатов.

Я хотел бы ввести :Ggr "def my_function" вместо:

:Ggrep "def my_function"
:cw

Как я могу определить эту команду :Ggr в моем файле .vimrc?

РЕДАКТИРОВАТЬ

Как только команда :Ggr определена, я могу отобразить git grep для слова под курсором, что действительно здорово:

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

person Régis B.    schedule 21.02.2014    source источник
comment
возможный дубликат VIM - несколько команд в одной строке   -  person Etheryte    schedule 21.02.2014
comment
Обратите внимание, что мне придется передать аргумент: Ggr в: Ggrep ... Так что это не так просто, как запустить две команды подряд.   -  person Régis B.    schedule 21.02.2014
comment
:Ggrep заполняет список quickfix, однако окно не открывается автоматически. Возможно, вы хотите, чтобы окно quickfix открывалось после любого вызова grep, autocmd QuickFixCmdPost *grep* cwindow, как предлагается в vim-fugitive Раздел часто задаваемых вопросов.   -  person Peter Rincker    schedule 21.02.2014


Ответы (3)


Это работает для меня:

:command -nargs=+ Ggr execute 'silent Ggrep!' <q-args> | cw | redraw!
person user149765    schedule 31.12.2014
comment
Фантастика! Это действительно улучшение предыдущего ответа. - person Régis B.; 31.12.2014
comment
Вы могли бы добавить это в качестве комментария к моему ответу, поскольку это всего лишь небольшая настройка. Многие сочтут то, что вы сделали, дурным тоном. По крайней мере, задокументируйте изменения и то, почему они необходимы. - person Ingo Karkat; 01.01.2015

Вы можете использовать символ <args> для вставки аргументов, переданных вашей пользовательской команде:

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

Примечание. Поскольку команда :Ggrep не имеет аргумента -bar, ее нельзя связать в цепочку, поэтому необходимо использовать :execute.

person Ingo Karkat    schedule 21.02.2014
comment
Это почти идеально: команда Ggrep открывает окно, которое необходимо закрыть перед запуском команды cw, поэтому мне нужно нажать ‹enter›, чтобы закрыть его. Есть идеи, как это улучшить? - person Régis B.; 21.02.2014
comment
Вы можете имитировать нажатие этой клавиши с помощью ... | execute "normal \<CR>" | cw или (что проще) попробовать ... | close | cw. - person Ingo Karkat; 21.02.2014
comment
Кажется, это не работает, у меня все еще есть сообщение Press ENTER of type, чтобы продолжить, которое отображается после команды: Ggrep. - person Régis B.; 21.02.2014
comment
О, это приглашение нажать-вводить, а не окно; Я неправильно понял; да, этого трудно избежать. - person Ingo Karkat; 21.02.2014
comment
Очень плохо. В любом случае вашего ответа достаточно. - person Régis B.; 21.02.2014

Уже упоминалось в одном из комментариев, но я думал, что решение, рекомендованное плагином на сайте fugitive.vim, заслуживает своего собственного ответа:

autocmd QuickFixCmdPost *grep* cwindow

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

person zzxyz    schedule 16.07.2018
comment
Это верно. Однако для этого необходимо один раз нажать ‹return› после команды: Ggr, что неудобно. - person Régis B.; 24.07.2018