Учитывая результат grep -n, как я могу открыть vim в этой конкретной строке? (используя только клавиатуру)

9

Когда я бегу grep "keyword" -nи получаю следующий список результатов:

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

Как я могу открыть один из файлов (скажем, 2-й в списке) в строке, которую он нашел?

Теперь я просто копирую вывод, используя мою мышь, и копирую его после, vimа затем добавляю +с номером строки, которую копирую. (имеется в виду, что я пишу, vim a/b/c +70используя копию мыши, чтобы получить имя файла, и другую копию мыши, чтобы получить номер строки [или я просто копирую ее вручную, когда она достаточно короткая))

Есть ли способ сделать это с помощью сочетания клавиш?

CIsForCookies
источник
Вы можете попробовать что - то вроде этого: echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset.
Аркадиуш Драбчик
2
Кроме того, если вы заинтересованы в более эффективном использовании Vim, посетите специальный сайт Vi и Vim Stack Exchange.
Муру

Ответы:

14

Две вещи:

  1. Вим имеет некоторую поддержку grep.

    Если вы открываете Vim и делаете :grep keyword ..., Vim заполняет список быстрых исправлений результатами и переходит к первому файлу. Затем вы можете перейти к n- й записи быстрого исправления с помощью :cc n(и других команд).

  2. Вы можете заполнить вышеупомянутый список быстрых исправлений, используя вывод grep:

    vim -q <(grep -n keyword ...)
    

    А затем используйте быстрые команды навигации, упомянутые выше.

Либо проще, чем играть вручную с выводом grep.

В качестве альтернативы (2) вы можете сохранить выходные данные grep в файл и использовать этот файл, если считаете, что не обязательно открывать Vim после:

grep ... | tee log
vim -q log
Мур
источник
Попытка использовать тот же метод для состояния git, но безрезультатно :( - vim -q <(git status | изменен grep)
CIsForCookies
3
@CIsForCookies Это не будет в том же формате, что и grep -n( <filename>:<line>: ...). Я использую беглый плагин для Git, а затем дело в том :Gstatus, чтобы перейти к нужному файлу и нажать Enter.
Муру
Кстати, я отредактировал свой ~ / .bashrc, grep alias чтобы всегда использовать цвета, и это, по какой-то причине, нарушило эту -q >()возможность ...
CIsForCookies
2

Вы можете сделать это так, если бы не было поддержки grep, как @muru ответил:

:cexpr system("grep -n keyword")

git grepНапример, его можно использовать с другой командой .

Также вы можете открыть вывод в буфере и использовать «cbuffer» для него.

Об этом см. Раздел « Быстрые исправления » в руководстве.

max630
источник