On Wednesday, October 7, 2015 at 12:28:19 AM UTC+2, ZyX wrote:
> 2015-10-05 19:18 GMT+03:00 glts <[email protected]>:
> > On Sunday, October 4, 2015 at 11:38:26 PM UTC+2, ZyX wrote:
> >> 2015-10-05 0:02 GMT+03:00 glts <[email protected]>:
> >> > 'getreg(regname, 1, 1)' returns different lists for the same selection
> >> > in characterwise and linewise mode. Why?
> >> >
> >> > To reproduce:
> >> > - Do 'Vy' on one line of text, then run :echo getreg('"', 1, 1).
> >> >   The result is ['text'].
> >> > - Do '0v$y' on one line of text, then again run :echo getreg('"', 1, 1).
> >> >   The result is ['text', ''].
> >>
> >> It is not same selection. In the second case you yank text and
> >> trailing EOL. In the first case you are in linewise mode, so you can’t
> >> (and don’t need to because it is covered by the mode flag) yank
> >> trailing EOL.
> >>
> >> If you think this should not happen then answer the question “how can
> >> script writer distinguish between the inclusive and exclusive
> >> selection yank results given that they behave differently when
> >> pasting” (see :h 'selection', alternative to setting this option is
> >> moving one character back after `$` motion).
> >
> > Don't 'Vy' and '0v$y' put the same stuff in the register? At least
> > judging by the output of :reg and the value of 'getreg('"')':
> >
> >     Vy:echo getreg('"')        gives     "text\n"
> >     0v$y:echo getreg('"')      gives     "text\n"
> >
> > But the output of 'getreg('"', 1, 1)' is different. That's what I find
> > unexpected.
> 
> Register type *is* part of the register. So there is no way linewise
> selection can put the same stuff in the register as characterwise.
> Also note that this behaviour means that internally these yanks put
> different text in structures: implementation does not care about
> register type when called with third argument.
> 
> Also note that making output identical is pointless because different
> register types have different semantics. Plugins that do something
> more intelligent then simple saving/restoring registers, but handle
> two register types the same way are most likely buggy. E.g. to
> implement `p` in VimL using `getreg()` I need to do the following
> buffer manipulations
> 
> 1. One `append()` call with linewise register.
> 2. One `getline()` call, one `setline()` call and one `append()` call
> with characterwise register.
> 3. One `getline()` and one `setline()` per each line for blockwise register.
> 
> >
> > I understand it was you who implemented the feature. Perhaps it would be
> > good to document this behaviour and also explain the motivation there. I
> > admit that I don't quite understand it and would very much appreciate
> > some clarification in the docs (I also didn't understand your remark
> > about the 'selection' option -- how is that related?).
> 
> Just try same code with different option value (inclusive/exclusive).
> And also try *pasting* with these values.
> 
> Specifically with exclusive selection you will get ['text'] just like
> with linewise mode for 0v$y. But when pasting you will not get
> newline. With inclusive you will get ['text', ''], and newline after
> pasting.

Ok, I think I got it. So if I wanted to emulate the output of the old
getreg('"'), I would need to check the result of getregtype() and fix up
the list returned by getreg('"', 1, 1) (losing the regtype semantics and
the capability of handling null bytes, of course -- pointless example).

    let l:reg = getreg('"', 1, 1)
    if getregtype('"') is# 'V'
      call add(l:reg, '')
    endif
    echomsg join(l:reg, "\n")

I guess that's fine with me.

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