Loading ...
Sorry, an error occurred while loading the content.
 

Re: Functions with [range] do not preserve the cursor line

Expand Messages
  • Andy Wokula
    ... One more hint: when you call that function from a mapping and you want a default range of `% , try the following: cno % getcmdpos()==1 ? % :
    Message 1 of 33 , Nov 19, 2012
      Am 19.11.2012 22:52, schrieb So8res:
      > I think functions with [range] should preserve the cursor line. 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]?

      One more hint: when you call that function from a mapping and you want a
      default range of `%', try the following:

      cno <expr> <SID>% getcmdpos()==1 ? "%" : ""

      " remove trailing ^M
      no <script> <Leader>sm :<SID>%InFunc s/\r$//e<C-B>KeepView <C-E>
      ou <Leader>sm|sunm <Leader>sm

      --
      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
    • So8res
      ... Any word on getting a variant of range functions that don t move the cursorline? This still bites me occasionally. -- -- You received this message from the
      Message 33 of 33 , Nov 11, 2013
        On Wednesday, December 5, 2012 9:13:17 AM UTC-8, So8res wrote:
        > >
        > > I don't like "stay", but can't think of something better right now.
        > >
        > > Perhaps "keepline"?
        > >
        >
        > How do you feel about using 'range!' (with a bang) instead?
        >
        > It would keep the :function argument space more concise, and would only be usable with 'range', both of which are nice. However, there's no precedent (that I can find) for command arguments having bangs.

        Any word on getting a variant of range functions that don't move the cursorline? This still bites me occasionally.

        --
        --
        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

        ---
        You received this message because you are subscribed to the Google Groups "vim_dev" group.
        To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
        For more options, visit https://groups.google.com/groups/opt_out.
      Your message has been successfully submitted and would be delivered to recipients shortly.