aboutsummaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'plugin')
-rw-r--r--plugin/strip_trailing_whitespace.vim114
1 files changed, 2 insertions, 112 deletions
diff --git a/plugin/strip_trailing_whitespace.vim b/plugin/strip_trailing_whitespace.vim
index f02f7a0..2cbfb5d 100644
--- a/plugin/strip_trailing_whitespace.vim
+++ b/plugin/strip_trailing_whitespace.vim
@@ -9,121 +9,11 @@
if exists('loaded_strip_trailing_whitespace') || &compatible
finish
endif
-if !has('user_commands') || v:version < 600
+if v:version < 700
finish
endif
let loaded_strip_trailing_whitespace = 1
-" Wrapper function to strip both horizontal and vertical trailing whitespace,
-" return the cursor to its previous position, and report changes
-function s:Strip(start, end) abort
-
- " Save cursor position
- let line = line('.')
- let col = col('.')
-
- " Whether we made changes
- let changed = 0
-
- " If we're going to the end, strip vertical space; we do this first so we
- " don't end up reporting having trimmed lines that we deleted
- if a:end == line('$')
- let vertical = s:StripVertical()
- let changed = changed || vertical > 0
- endif
-
- " Strip horizontal space
- let horizontal = s:StripHorizontal(a:start, a:end)
- let changed = changed || horizontal > 0
-
- " Return the cursor
- call s:Cursor(line, col)
-
- " Report what changed
- let msg = horizontal.' trimmed'
- if exists('vertical')
- let msg = msg.', '.vertical.' deleted'
- endif
- echomsg msg
-
- " Return whether anything changed
- return changed
-
-endfunction
-
-" Strip horizontal trailing whitespace, return the number of lines changed
-function s:StripHorizontal(start, end) abort
-
- " Start a count of lines trimmed
- let stripped = 0
-
- " Iterate through buffer
- let num = a:start
- while num <= line('$') && num <= a:end
-
- " If the line has trailing whitespace, strip it off and bump the count
- let line = getline(num)
- if line =~# '\s\+$'
- call setline(num, substitute(line, '\s*$', '', ''))
- let stripped = stripped + 1
- endif
-
- " Bump for next iteration
- let num = num + 1
-
- endwhile
-
- " Return the number of lines trimmed
- return stripped
-
-endfunction
-
-" Strip trailing vertical whitespace, return the number of lines changed
-function s:StripVertical() abort
-
- " Store the number of the last line we found with non-whitespace characters
- " on it; start at 1 because even if it's empty it's never trailing
- let eof = 1
-
- " Iterate through buffer
- let num = 1
- while num <= line('$')
-
- " If the line has any non-whitespace characters in it, update our pointer
- " to the end of the file text
- let line = getline(num)
- if line =~# '\S'
- let eof = num
- endif
-
- " Bump for next iteration
- let num = num + 1
-
- endwhile
-
- " Get the number of lines to delete; if there are any, build a range and
- " remove them with :delete, suppressing its normal output (we'll do it)
- let stripped = line('$') - eof
- if stripped
- let range = (eof + 1).',$'
- silent execute range.'delete'
- endif
-
- " Return the number of lines deleted
- return stripped
-
-endfunction
-
-" Position the cursor; use cursor() if we have it, :normal if not (Vim 6.0)
-function s:Cursor(line, col) abort
- if exists('*cursor')
- return cursor(a:line, a:col)
- else
- execute 'normal! '.a:line.'G'.a:col.'|'
- return 1
- endif
-endfunction
-
" User command for the above
command! -range=% StripTrailingWhitespace
- \ call <SID>Strip(<line1>, <line2>)
+ \ call strip_trailing_whitespace#Strip(<line1>, <line2>)