缩进条件

时间:2011-04-17 19:42:23

标签: vim indentation

当所有下一个条件匹配时,我想缩进每行5个空格:

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

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

这是完全未经测试的,我确​​信有更优雅的方法,但这应该给你一个粗略的想法。我一次扫描一个文件中的每一行,如果满足您的一个条件,则缩进它。

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

希望这会有所帮助。让我知道它是否落在脸上。