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

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

Expand Messages
  • Andy Wokula
    Nov 19, 2012
    • 0 Attachment
      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

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


      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
    • Show all 33 messages in this topic