@@ -97,20 +97,6 @@ function! s:error_message(result) abort
9797 endif
9898endfunction
9999
100- function ! s: restore_screen_pos (prev_screen) abort
101- let screen_line = line (' w0' )
102- if screen_line == a: prev_screen
103- return
104- endif
105- let delta = screen_line - a: prev_screen
106- if delta > 0
107- let keys = delta . " \<C-y> "
108- else
109- let keys = (- delta) . " \<C-e> "
110- endif
111- execute " normal!" keys
112- endfunction
113-
114100function ! clang_format#get_version () abort
115101 if &shell = ~# ' csh$' && executable (' /bin/bash' )
116102 let shell_save = &shell
@@ -240,38 +226,25 @@ endfunction
240226
241227" replace buffer {{{
242228function ! clang_format#replace (line1, line2, ... ) abort
243-
244229 call s: verify_command ()
245230
246231 let pos_save = a: 0 >= 1 ? a: 1 : getpos (' .' )
247- let screen_save = a: 0 >= 2 ? a: 2 : line (' w0' )
248- let sel_save = &l: selection
249- let &l: selection = ' inclusive'
250- let fold_closed_save = foldclosed (line (' .' ))
251- let [save_g_reg, save_g_regtype] = [getreg (' g' ), getregtype (' g' )]
252- let [save_unnamed_reg, save_unnamed_regtype] = [getreg (v: register ), getregtype (v: register )]
253-
254- try
255- let formatted = clang_format#format (a: line1 , a: line2 )
256- if s: success (formatted)
257- call setreg (' g' , formatted, ' V' )
258- silent keepjumps normal ! gg0VG" gp
259- else
260- call s: error_message (formatted)
232+ let formatted = clang_format#format (a: line1 , a: line2 )
233+ if s: success (formatted)
234+ let winview = winsaveview ()
235+ let splitted = split (formatted, ' \n' )
236+
237+ silent ! undojoin
238+ if line (' $' ) > len (splitted)
239+ execute len (splitted) .' ,$delete'
261240 endif
262- finally
263- call setreg (v: register , save_unnamed_reg, save_unnamed_regtype)
264- call setreg (' g' , save_g_reg, save_g_regtype)
265- let &l: selection = sel_save
241+ call setline (1 , splitted)
242+ call winrestview (winview)
266243 call setpos (' .' , pos_save)
267- if fold_closed_save == -1
268- let l = line (' .' )
269- while foldclosed (l ) >= 0
270- foldopen
271- endwhile
272- endif
273- call s: restore_screen_pos (screen_save)
274- endtry
244+ else
245+ call s: error_message (formatted)
246+ endif
247+
275248endfunction
276249" }}}
277250
0 commit comments