@@ -218,18 +218,15 @@ endfunction
218218" }}}
219219
220220" replace buffer {{{
221- function ! clang_format#replace (line1, line2) abort
221+ function ! clang_format#replace (line1, line2, ... ) abort
222222
223223 call s: verify_command ()
224224
225- let pos_save = getpos (' .' )
226- let screen_save = line (' w0' )
225+ let pos_save = a: 0 >= 1 ? a: 1 : getpos (' .' )
226+ let screen_save = a: 0 >= 2 ? a: 2 : line (' w0' )
227227 let sel_save = &l: selection
228228 let &l: selection = ' inclusive'
229- let fold_save = 0
230- if &foldenable
231- let fold_save = foldlevel (line (' .' ))
232- endif
229+ let fold_closed_save = foldclosed (line (' .' ))
233230 let [save_g_reg, save_g_regtype] = [getreg (' g' ), getregtype (' g' )]
234231 let [save_unnamed_reg, save_unnamed_regtype] = [getreg (v: register ), getregtype (v: register )]
235232
@@ -246,18 +243,13 @@ function! clang_format#replace(line1, line2) abort
246243 call setreg (' g' , save_g_reg, save_g_regtype)
247244 let &l: selection = sel_save
248245 call setpos (' .' , pos_save)
249- call s: restore_screen_pos (screen_save)
250- if fold_save > 0
251- let level = foldlevel (line (' .' ))
252- while fold_save > level
246+ if fold_closed_save == -1
247+ let l = line (' .' )
248+ while foldclosed (l ) >= 0
253249 foldopen
254- let l = foldlevel (line (' .' ))
255- if l == level
256- break
257- endif
258- let level = l
259250 endwhile
260251 endif
252+ call s: restore_screen_pos (screen_save)
261253 endtry
262254endfunction
263255" }}}
0 commit comments