Отступ с условиями - PullRequest
       11

Отступ с условиями

0 голосов
/ 17 апреля 2011

Я хотел бы сделать отступ для каждой строки с 5 пробелами, когда все следующие условия соответствуют:

1) после пустой строки
2) когда строка начинается с заглавной буквы
3) когда в строке более 80 символов, если для файла не задана ширина текста
4) когда строка содержит более (textwidth-10) символов, когда для файла задана ширина текста
и следующая строка не должна начинаться с заглавной буквы.

Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 18 апреля 2011

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

function! Indenter()
    let winview=winsaveview()
    try
        let this_line_num=1
        let tw = &textwidth
        while this_line_num <= line("$")
            let thisline=getline(this_line_num)
            let lastline=getline(this_line_num-1)
            let firstchar=substitute(matchstr(thisline,"^ *.")," ","","g")
            if ( matchstr(lastline,"^.") == "" && this_line_num > 1 )
                        \ || firstchar =~# "[A-Z]"
                        \ || ( tw == 0 && strlen(thisline) > 80 )
                        \ || ( tw != 0 && strlen(thisline) > tw-10
                                     \ && firstchar !~# "[A-Z]" )
                sil exe this_line_num . "s#^#     #"
            endif
            let this_line_num+=1
        endwhile
    finally
        call winrestview(winview)
    endtry
endfunction

Я предполагаю, что "пустые строки" означают отсутствие пробелов (следовательно, matchstr(lastline,"^.")), и что строки, содержащие текст, могут иметь начальные пробелы (следовательно, команда substitute(matchstr()) для получения первого непробельного символа.

Надеюсь, это поможет. Дайте мне знать, если он падает на его лицо.

...