2012-01-14 6 views
-2

Мне нужен макрос/функция, которая ищет текущий документ, начиная сверху, для определенного шаблона. Остановка на первой строке, которая не закомментирована.Vim, поиск в заголовке документа

Например, в этом ВИМ сценария:

Он не остановится, если линия, возвращает истину, если он нашел образец и ложь в противном случае.

Вся помощь оценивается!

+0

Просто уточнить: вы имеете в виду «остановку в первом матче, который не закомментирован»? Или вы ТОЛЬКО хотите найти первую строку без объявления? –

+0

@PrinceGoulash: он означает поиск в заголовке, который является областью с комментариями в верхней части файла, вплоть до (и, естественно, исключая) первую строку без комментариев. –

+2

Кстати, @Filip, причина, по которой вы получаете downvotes, состоит в том, что вы просите функцию без указания на то, что вы что-то пробовали. Stack Overflow не здесь, чтобы предоставить вам код, но чтобы помочь вам с проблемами с кодом. –

ответ

1

Скажем, ваш рисунок - это буква 'e'.

Для поиска строки, не комментировали, но содержит е:

/^\%(\s*"\)\@!.*e 

Это использует отрицательный предпросмотр (\@!), чтобы подтвердить, что начало линии (^) не следует в начале комментария (пробел, а затем двойная кавычка \s*"), но за ним следует 'e' (.*e). \%( и \) делает замкнутый шаблон атомом, в котором другие операторы (например, негативный просмотр) могут работать как единое целое.

Для выполнения команды на соответствующих линиях, используйте :g

:g/^\%(\s*"\)\@!.*e/echo "found one" 

Чтобы увидеть, если соответствует текущей строки, используйте match()

:echo match(getline(line('.')), '^\%(\s*"\)\@!.*e') >= 0 ? 'true' : 'false' 

регулярное выражение почти всегда такой же, речь идет что вы хотите делать с соответствующими линиями?

Смежные вопросы