用条件缩进



我想在所有后续条件都匹配时将每行缩进5个空格:

1)空行后
2)当行以大写字母
开头时3)当行超过80个字符时,当文件没有设置
文本宽度时4)当文件的文本宽度设置为
时,当行有超过(textwidth-10)个字符时并且下一行不能以大写字母开头。

有人能帮我吗?

这是完全未经测试的,我相信还有更优雅的方法,但这应该给您一个大致的概念。我一次扫描文件中的每一行,如果满足您的一个条件,则对其进行缩进。

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())命令获得第一个非空白字符。

希望这对你有帮助。如果它一败涂地,请告诉我

最新更新