当所有下一个条件匹配时,我想缩进每行5个空格:
1)空行后
2)当行以大写字母开头时
3)当文件没有设置文本宽度时,该行有超过80个字符
4)当文件具有textwidth set
时,该行具有多个(textwidth-10)个字符
并且下一行不能以大写字母开头。
任何人都可以帮助我吗?
答案 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>
希望这会有所帮助。让我知道它是否落在脸上。