@@ -97,20 +97,6 @@ function! s:error_message(result) abort
97
97
endif
98
98
endfunction
99
99
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
-
114
100
function ! clang_format#get_version () abort
115
101
if &shell = ~# ' csh$' && executable (' /bin/bash' )
116
102
let shell_save = &shell
@@ -240,38 +226,25 @@ endfunction
240
226
241
227
" replace buffer {{{
242
228
function ! clang_format#replace (line1, line2, ... ) abort
243
-
244
229
call s: verify_command ()
245
230
246
231
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'
261
240
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)
266
243
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
+
275
248
endfunction
276
249
" }}}
277
250
0 commit comments