That's a nifty command and mapping, but I had no trouble with getting a custom command to use the range correctly. (You can just use -range, pass <line1> and <line2> to the function, and have the function do winsaveview() and winrestview(), which is what I do now.)
Then you can also default to the whole file much cleaner e.g. with -range=%. But I'm not trying to write a command, I'm trying to write a function. The question is, is there any way to do this in a function that takes a range, called like: %call SomeUniformApiFunction() I'm not struggling to get the functionality, I'm struggling to expose a sane (function) API for the functionality. On Mon, Nov 19, 2012 at 4:19 PM, Andy Wokula <[email protected]> wrote: > Am 19.11.2012 22:52, schrieb So8res: > > I think functions with [range] should preserve the cursor line. >> > > Don't break scripts that count on this. > > > Assume you have: >> >> function RangeTest() range >> echo line('.') >> endfunction >> >> And you put the cursor on line 2 and :%call RangeTest() >> >> This function will echo 1, because the cursor is moved to the >> beginning of the range *before* entering the function. >> >> I was attempting to create a function which does a search-replace (:s) >> without moving the cursor (using winsaveview() and winrestview()). It >> turns out this is not possible, because the cursor is moved before >> winsaveview() can be called. >> >> Is this the intended behavior, or is it a bug? If it's intended, is >> there a way to save the winview before entering a function with >> [range]? >> > > Example: remove trailing white space in range (default `%'), keeping > cursor position, last search pattern etc. > > :no <Leader>ss :v/^-- $/s/\s\+$//e<C-B>KeepView InFunc! <C-E> > :ou <Leader>ss|sunm <Leader>ss > " final <CR> could be added > > for :KeepView and :InFunc, see > http://vim.sourceforge.net/**scripts/script.php?script_id=**3800<http://vim.sourceforge.net/scripts/script.php?script_id=3800> > > :KeepView does winsaveview() and winrestview() > :InFunc does no more than executing the argument within a function > to make use of :h function-search-undo > > You can insert any other command instead of > v/^-- $/s/\s\+$//e > that accepts a range. > > -- > Andy > > > -- > You received this message from the "vim_dev" maillist. > Do not top-post! Type your reply below the text you are replying to. > For more information, visit > http://www.vim.org/maillist.**php<http://www.vim.org/maillist.php> > -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php
