how do i remap dd so that it becomes context-dependent?

41 views
Skip to first unread message

leo

unread,
Jun 30, 2013, 2:32:46 PM6/30/13
to vim...@googlegroups.com

Hello all,

I'm using "set wrap". I'd like to come up with a remap of dd that would does the follwing:
If the current line is wrapped, it then performs g0dg$
Else, it performs the conventional dd.

The problem is this. if i just use:
vnoremap dd g0dg$
nnoremap dd g0dg$
whenever i have non wrapped lines, such as:
a
b
c
And I "dd" line two, it will end up with sth like:
a
(blank line)
c
Instead of this expecting result:
a
c

Thanks in advance

Nikolay Pavlov

unread,
Jun 30, 2013, 2:38:53 PM6/30/13
to vim...@googlegroups.com

Check whether virtcol('$') is greater then winwidth(0): something like this:

nnoremap <expr> dd (virtcol('$') > winwidth(0)) ? 'g0dg$' : 'dd'

> --
> --
> You received this message from the "vim_use" 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_use" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+u...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

Leonardo Barbosa

unread,
Jul 13, 2013, 5:52:51 PM7/13/13
to vim...@googlegroups.com
Thanks Nikolay. That did the job. I was wondering if i could pass an
argument to the map so that i can do something like : 2dd, 3dd, and so
on...

Leo
> You received this message because you are subscribed to a topic in the
> Google Groups "vim_use" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/vim_use/YHrLi4MGons/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to

Nikolay Pavlov

unread,
Jul 14, 2013, 4:37:17 AM7/14/13
to vim...@googlegroups.com


On Jul 14, 2013 1:53 AM, "Leonardo Barbosa" <barbosa....@gmail.com> wrote:
>
> Thanks Nikolay. That did the job. I was wondering if i could pass an
> argument to the map so that i can do something like : 2dd, 3dd, and so
> on...

Count is accessible via v:count and v:count1. You will have to write function that handles it properly though in the case of lengthy lines.

Paul Isambert

unread,
Jul 14, 2013, 6:03:34 AM7/14/13
to vim...@googlegroups.com
Nikolay Pavlov <zyx...@gmail.com> a écrit:
> On Jul 14, 2013 1:53 AM, "Leonardo Barbosa" <barbosa....@gmail.com>
> wrote:
> >
> > Thanks Nikolay. That did the job. I was wondering if i could pass an
> > argument to the map so that i can do something like : 2dd, 3dd, and so
> > on...
>
> Count is accessible via v:count and v:count1. You will have to write
> function that handles it properly though in the case of lengthy lines.

This should work:

nnoremap <buffer> <expr> dd (virtcol('$') > winwidth(0)) ? 'g0d' . (v:count > 1 ? 'v' . v:count : '') . 'g$' : 'dd'

The conditional addition of “v” is explained (more or less) in my next message.
Reply all
Reply to author
Forward
0 new messages