Tony Mechelynck wrote:

> >> In the current $VIMRUNTIME/vimrc_example.vim ("Last change: 2014 Nov
> >> 05") the following autocommand is defined at lines 73 to 81:
> >>
> >>     " When editing a file, always jump to the last known cursor position.
> >>     " Don't do it when the position is invalid or when inside an event
> >> handler
> >>     " (happens when dropping a file on gvim).
> >>     " Also don't do it when the mark is in the first line, that is the
> >> default
> >>     " position when opening a file.
> >>     autocmd BufReadPost *
> >>       \ if line("'\"") > 1 && line("'\"") <= line("$") |
> >>       \   exe "normal! g`\"" |
> >>       \ endif
> >>
> >>
> >> This results in failing to go back to the last known cursor position if
> >> it was in line 1 but not at start-of-line. (The default position is _at
> >> start_ of line 1.) I have a file with a long first line, in which it
> >> would be extremely useful to me to be able to reload the file with the
> >> cursor correctly positioned in that first line, just like it is if it
> >> happened to be in line 2 or higher when the file was last closed in Vim.
> >>
> >> IMHO the first condition (before the &&) should be
> >> either
> >>    line("'\"") >= 1
> >> or
> >>    line("'\"") > 0
> >>
> >> and (again, IMHO) the two-line comment sentence starting "Also" should
> >> be removed.
> >
> > If the " mark is at the default position we most likely don't want to
> > move the cursor there.  However, if it is not on the first non-blank in
> > the first line then that is not the default position.  Thus if the mark
> > is in line 1 the column needs to be compared with the indent of the
> > first line.
> 
> Are there cases where the cursor would end up at a "meaningful" position 
> if we don't move it at the BufReadPost autocommand? In my experience, in 
> that case it ends up at start of line 1 anyway. Moving the cursor to 
> where it already is wouldn't be harmful (and it wouldn't be costly 
> either, compared to the time needed to get the file from disk).
> 
> But if you insist, I suppose that
> 
>       \ if (line("'\"") > 1 && line("'\"") <= line("$"))
>       \ || (line("'\"") == 1 && virtcol("'\"") > (indent(1) + 1)) |
> 
> would be an acceptable replacement for the current if-line (and its time 
> cost would of course still be negligible against the disk read time). (I 
> know that most of the expression parentheses I wrote are not necessary 
> for the parser; however, they make the meaning more obvious to the human 
> reader. "Adding superfluous parentheses doesn't harm, but removing 
> necessary ones cause bugs.")
> 
> IIUC, virtcol() is necessary because indent() is counted in spaces but 
> the indent could be made of hard tabs. Also, when there is no indent 
> indent() is zero but the first nonblank is in column 1, hence the "+ 1" 
> at the end. Without it, we would still move the cursor when the mark is 
> "at" the indent.

OK, let's just check if the line number is valid.  I'll make it like
that and await any complaints...

-- 
There are 10 kinds of people: Those who understand binary and those who don't.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui