Vim: регулярное выражение в функции поиска не работает должным образом, чтобы найти левые фигурные скобки - PullRequest
1 голос
/ 11 декабря 2011

Я пытаюсь составить функцию сценария Vim, чтобы помочь отформатировать расположение левых фигурных скобок в C, как функциональные блоки.

function! FixLeftBraces()
    "Set the cursor to the top of the file
    call cursor(1,0)
    while search(".\+{",'We') > 0
        exe "normal i\n\e"
    endwhile
endfunction

В этом примере моя цель - найти левую фигурную скобку, которая находится на той же строке, что и функция, и переместить ее на следующую строку. Параметры We предотвращают перенос файла и перемещают курсор в конец выбранной области поиска соответственно.

Когда я выполняю поиск в Vim с использованием режима /, вход в /.\+{ выполняет поиск и выделяет строки, которые, как я ожидаю, будут в исходном коде.

Например, строки C, такие как:

//is highlighted
int main(){

//is not highlighted
void otherFuncion()
{

Когда я использую созданный FixLeftBraces() после его получения, он не работает. Он просто работает и ничего не делает.

Если я изменю поиск на search("{",'We'), то FixLeftBraces() запускается, но добавляет новую строку после каждой левой фигурной скобки. Поэтому я запутался, почему FixLeftBraces() не работает с search(".\+{",'We').

1 Ответ

3 голосов
/ 11 декабря 2011

В упомянутых тестовых примерах вызов функции search() продолжает возвращать ноль и, следовательно, вся функция не работает, как ожидалось. Причина это неправильно указанная схема. Там не мало специальных символов который может быть добавлен в строковую константу в двойных кавычках с использованием \ -синтаксиса (см. :help expr-"). Следовательно, подстрока \+ в литерале регулярного выражения интерпретируется как один + символ, и первоначальное намерение рисунок искажен.

Чтобы избежать этого нежелательного поведения, избегайте символа обратной косой черты, изменяя шаблонная строка до

".\\+{"

или переключитесь на строковый литерал в одинарных кавычках, если обратная косая черта отсутствует особое значение (см. :help expr-'),

'.\+{'
...