Автозаполнение из вывода grep

Сначала мне пришлось сделать симлинк с

/home/user

на

/cygdrive/c/Users/user

и, следуя

https://serverfault.com/questions/253313/ssh-hostname-returns-bad-owner-or-permissions-on-ssh-config

сделать

chmod 600 ~/.ssh/config

и это заставило его работать.

Я все еще получаю

key_load_public: invalid format

ошибки, но несмотря на это, теперь все работает.

2
13.04.2017, 15:37
1 ответ

Я создал сценарий для рекурсивного поиска шаблона с помощью grep, а затем я могу выбрать один из совпадает, поэтому vim откроет этот файл в этой строке. Я называю его vgrep (vim grep, хотя в нем также используется awk ). Вот его код:

#!/bin/bash
my_grep() {
        grep -Rn -I --color=auto --exclude-dir={.svn,.git} --exclude={tags,cscope.out} "$@" . 2>/dev/null
}
my_grep_color() {
        grep -Rn -I --color=always --exclude-dir={.svn,.git} --exclude={tags,cscope.out} "$@" . 2>/dev/null
}

awk '{
    print NR, $0
}' <(my_grep_color "$@")

awk '{
    lines[NR]=$1;
}

END{
    printf "Enter index: "
    getline num < "-";
    split(lines[num], s, ":")
    system("vim "s[1]" +"s[2])
}' <(my_grep "$@")

Я дважды вызываю grep , чтобы выделить мои совпадения, вы можете изменить его, чтобы он вызывался только один раз, но вы потеряете выделение.

Использование:

Предположим, вы хотите открыть vim в строке, где есть слово «Foo», вы можете использовать его так: vgrep Foo

Если есть файл foobar, например:

a b c
Bar
e f Foo g
h i

vgrep выведет это:

1 ./foobar:3 e f Foo g
Enter index: 

Итак, вы можете ввести 1 + введите , и он откроет этот файл в третьей строке. Он будет выводить по одной индексированной строке для каждого найденного совпадения.

Я почти уверен, что этот сценарий можно улучшить, но для меня он отлично работает.


Также рассмотрите возможность использования ctags и cscope , если вы работаете с C / C ++ .

2
27.01.2020, 22:11

Теги

Похожие вопросы