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

: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

Raspunde prin e-mail lui