З огляду на результат grep -n, як я можу відкрити vim у цьому конкретному рядку? (використовуючи лише клавіатуру)


9

Коли я запускаю grep "keyword" -nі отримую такий список результатів:

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

Як я можу відкрити один із файлів (скажімо, другий у списку) у знайденому рядку?

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

Чи є спосіб це зробити за допомогою комбінації клавіш?


Ви можете спробувати що - щось на зразок цього: echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset.
Аркадіуш Драбчик

2
Крім того, якщо вам цікаво ефективніше використовувати Vim, перегляньте спеціалізований сайт обміну Vi та Vim Stack.
муру

Відповіді:


14

Дві речі:

  1. Vim має певну підтримку 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 | 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".

Дивіться розділ швидкого виправлення з цього посібника.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.