tags:

views:

131

answers:

2

I've been using vim for several months now and I've gotten used to using C and D to change and delete everything from the cursor to the end of the line.

Consider the line below where the cursor is on the 'b' in 'bar':

foo.bar("hello world")

Hitting D at this point will yield:

foo.

While hitting C will do the same plus start insert mode with the cursor after the period.

However, pressing Y doesn't do the intuitively similar thing (copying everything from the cursor to the end of the line). Instead, it copies the entire line (just like yy).

How do I make Y copy the characters from the cursor to the end of the line instead of copying the entire line like yy?

+3  A: 

nmap Y y$

Does that do what you want?

EDIT

The reason why Y does the same thing as yy probably has something to do with this:

{Visual}["x]y           Yank the highlighted text [into register x] (for
                        {Visual} see |Visual-mode|).  {not in Vi}

                                                        *v_Y*
{Visual}["x]Y           Yank the highlighted lines [into register x] (for
                        {Visual} see |Visual-mode|).  {not in Vi}

Y is meant to act on lines, y is meant to act on individual characters?

Jamie Wong
Thank you! Any idea why `Y` doesn't behave the same way as `C` and `D`?
advait
@advait See edit. Really not sure though. Brian might be right - might just be for historical reasons.
Jamie Wong
+3  A: 

From this configuration:

" make Y effect to end of line instead of whole line
map Y y$

I suspect the default behaviour is simply due to some historical inconsistency.

Brian Agnew