aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2019-06-04 01:06:10 +1200
committerTom Ryder <tom@sanctum.geek.nz>2019-06-04 01:06:10 +1200
commit90e5acaf0add1d5caf78417ff544ea1b2d74c0ac (patch)
tree2646b998bdb401b0f67645871fc900922d3c26df
parentAdd command example (diff)
downloadvim-keep-position-90e5acaf0add1d5caf78417ff544ea1b2d74c0ac.tar.gz
vim-keep-position-90e5acaf0add1d5caf78417ff544ea1b2d74c0ac.zip
Add ranges support
-rw-r--r--autoload/keep_position.vim6
-rw-r--r--doc/keep_position.txt11
-rw-r--r--plugin/keep_position.vim4
3 files changed, 17 insertions, 4 deletions
diff --git a/autoload/keep_position.vim b/autoload/keep_position.vim
index a2f2ed4..7ff0228 100644
--- a/autoload/keep_position.vim
+++ b/autoload/keep_position.vim
@@ -1,5 +1,7 @@
-function! keep_position#(command) abort
+function! keep_position#(command, range, start, end) abort
let view = winsaveview()
execute a:command
- call winrestview(view)
+ if !a:range || (a:start >= line("'[") && a:end <= line("']"))
+ call winrestview(view)
+ endif
endfunction
diff --git a/doc/keep_position.txt b/doc/keep_position.txt
index 25de36f..05f69bc 100644
--- a/doc/keep_position.txt
+++ b/doc/keep_position.txt
@@ -20,6 +20,17 @@ especially ones that work on the entire buffer:
>
:KeepPosition %!tidy
<
+You will generally want to use this command as above, without a range.
+However, if you do specify a range, it will only preserve the view if the last
+change to the buffer--presumably made by your nominated command--entirely
+encompassed the given range. This is checked with the |'[| and |']| marks.
+
+The author uses the range functionality to make a "conditional jump"; only
+jump to the changes the given command makes if it didn't affect the entire
+buffer, e.g.:
+>
+ :nnoremap u :<C-U>%KeepPosition undo<CR>
+<
AUTHOR *keep_position-author*
Written and maintained by Tom Ryder <tom@sanctum.geek.nz>.
diff --git a/plugin/keep_position.vim b/plugin/keep_position.vim
index 1389bcf..01227c3 100644
--- a/plugin/keep_position.vim
+++ b/plugin/keep_position.vim
@@ -11,5 +11,5 @@ endif
let loaded_keep_position = 1
" User command definition refers to autoloaded function
-command! -nargs=+ -complete=command KeepPosition
- \ call keep_position#(<q-args>)
+command! -nargs=+ -complete=command -range KeepPosition
+ \ call keep_position#(<q-args>, <range>, <line1>, <line2>)