Skip to content

Commit

Permalink
Save, set, and restore startofline
Browse files Browse the repository at this point in the history
Consider this code:
```javascript
_.map(
  (
    mapObjOnK
  )
);
```
If the cursor is on the 3rd line and you press <kbd>d</kbd><kbd>s</kbd><kbd>b</kbd>, the code will become
```javascript
_.map(
);
mapObjOnK
```

The problem occurs if `startofline` is off.

With this change, I set it before processing the the call to
`dosurround`, and then, after the call, I'm unsetting it if
it was unset.
  • Loading branch information
Aster89 authored and tpope committed Mar 25, 2022
1 parent baf89ad commit 9857a87
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions plugin/surround.vim
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,8 @@ function! s:reindent() abort " {{{1
endfunction " }}}1

function! s:dosurround(...) " {{{1
let sol_save = &startofline
set startofline
let scount = v:count1
let char = (a:0 ? a:1 : s:inputtarget())
let spc = ""
Expand All @@ -388,6 +390,9 @@ function! s:dosurround(...) " {{{1
if a:0 > 1
let newchar = a:2
if newchar == "\<Esc>" || newchar == "\<C-C>" || newchar == ""
if !sol_save
set nostartofline
endif
return s:beep()
endif
endif
Expand All @@ -414,6 +419,9 @@ function! s:dosurround(...) " {{{1
if keeper == ""
call setreg('"',original,otype)
let &clipboard = cb_save
if !sol_save
set nostartofline
endif
return ""
endif
let oldline = getline('.')
Expand Down Expand Up @@ -478,6 +486,9 @@ function! s:dosurround(...) " {{{1
else
silent! call repeat#set("\<Plug>C".(a:0 > 2 && a:3 ? "S" : "s")."urround".char.newchar.s:input,scount)
endif
if !sol_save
set nostartofline
endif
endfunction " }}}1

function! s:changesurround(...) " {{{1
Expand Down

0 comments on commit 9857a87

Please sign in to comment.