我想在所有后续条件都匹配时将每行缩进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())
命令获得第一个非空白字符。
希望这对你有帮助。如果它一败涂地,请告诉我