beldmit: (Программизм)
[personal profile] beldmit
Наконец-то я настроил при использовании grep из vim игнорировать .svn

set grepprg=grep\ -n\ --exclude=tags\ --exclude=TAGS\ --exclude-dir=.svn\ $*\ /dev/null

Собственно, переменную окружения GREP_OPTIONS, через которую я работал несколько лет, объявили deprecated (но пока не выпилили). А во всех советах игнорировали часть аргументов, в результате чего навигация по найденному из vim не работала. В таком виде - работает. Осталось .git туда же добавить, но это по необходимости.

Date: 2019-12-11 10:02 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Хорошая идея, надо утащить.

Date: 2019-12-11 10:39 am (UTC)
gegmopo4: (Default)
From: [personal profile] gegmopo4
«Вы всё ещё работаете с Subversion? Тогда мы идём к вам!» (Реклама Git)

Date: 2019-12-11 11:09 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Мы уже не работаем с subverssion. Но для гита это решение подходит ничем не хуже.
Равно как и для множества других интересных ситуаций.
Правда, мне, похоже в каждой из своих книг делать разный grepprg, чтобы исключить из поиска всякие генерируемые форматы, оставить только исходник. Но там все равно везде есть .lvimrc.

Принципиально веть тут не имя директории в --exclude, а то, какие еще параметры надо выставить.
Например /dev/null в хвосте.

Date: 2019-12-11 11:43 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Есть такой плагин local vimrc.
Позволяет создать в каждом поддереве свой локальный файл конфигурации, который будет читаться vim-ом если он запускается внутри этого поддерева.

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

Параметр $* тут значит то же самое, что в шелловских скриптах - в смысле "на это место будут подставлы все аргументы". При этом это не шелловский синтаксис, а вимовский. Описан, кстати в :help grepprg.

А /dev/null там нужен для того, чтобы если вдруг кто-то нечаянно наберет :grep без параметров, у него бы все нафиг не подвисло. Потому что по умолчанию grep будет ждать текста со стандартного ввода. Соотвественно, чтобы программа вовремя завершилась, у нее в аргуммента должен быть хоть один файл. Поэтому, туда добавлен в конец заведомо пустой /dev/null.

И еще - если у нас в командной строке grep указан ровно один файл, он не будет в выводе даже с -n сопровождать найденную строку именем файла (а не только номером строки). А если два и более - будет. Поэтому vim сумеет правильно найти куда курсор ставить. Независимо от числа файлов, в которых попросил искать пользователь. Того же эффекта можно в GNU grep добиться с помощью -H о чем честно рассказано в хелпе на grepprg, но /dev/null во-первых убивает двух зайцев разом, во-вторых работает с бо́льшим количеством разных grep.

Edited Date: 2019-12-11 11:45 am (UTC)

Date: 2019-12-11 03:22 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
Для гита есть git --no-pager grep. Который сразу из коробки работает рекурсивно и игнорирует .git и всё, что не под версионным контролем.

Date: 2019-12-11 03:30 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
Ну он drop-in replacement для grep’а. Так что ожидаю, что интегрируется так же. (Я не настоящий вимовод, но в Емаксе аналогично работает.)

Date: 2019-12-11 03:49 pm (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
git grep -Ovim

Причём git знает про vim и передаёт ему параметр поиска: vim /search_string, так что vim сразу встаёт на нужную строку, а по нажатию n ищет дальше.

PS. Аналогично git знает про less.

Date: 2019-12-12 04:41 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Ну и как по вашему, vim должен отлечичть, когда директория, где запускается grepprg является частью git-репозитория, а когда нет?

Date: 2019-12-12 04:44 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
Видимо, теми же самыми проектоспецифичными настройками.

Date: 2019-12-12 06:49 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Ага. Сначала насоздаем себе трудностей, потом будем героически их преодолевать.
Решение, предложенное Белявским - универсально. Применимо к практически любой системе управления версиями. У меня, правда, ни разу не возникало проблем с false positives от
.fslckout

Date: 2019-12-11 03:51 pm (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
У меня так: diff -ru --speed-large-files -x CVS -x .git -x .hg -x .svn -x '*.py[co]' -x __pycache__

Date: 2019-12-12 11:56 am (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
Просто для примера моего списка игнорирований.

Опция -r означает "сравнивать рекурсивно".

Опция -u означает "выдавать unified context diff".

Date: 2019-12-12 12:36 pm (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
К чему тогда относился вопрос?

Date: 2019-12-11 04:21 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Хорошая штучка, спасибо; не знал.

Ну и svn тоже пора на помойку истории.

Profile

beldmit: (Default)
Dmitry Belyavskiy

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122 2324252627
28 29 3031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 1st, 2026 09:00 pm
Powered by Dreamwidth Studios