Сначала мне пришлось сделать симлинк с
/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
ошибки, но несмотря на это, теперь все работает.
Я создал сценарий для рекурсивного поиска шаблона с помощью 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 ++
.