I'm trying to add an attribute to a java class, using VIM as the editor. Therefore I thought I could use a command to ease my work with all the boilerplate code. Eg:
All lines containing "atributeA", like this one
this.attributeA=attributeA //basic constructor
should turn into
this.attributeA=attributeA //basic constructor
this.attributeB=attributeB //basic constructor
Is it possible?
Your exact sample is easy to achieve with:
But it is entirely possible that you want something more generic. If that's the case you should probably edit your question.
Have a look at this function:
When you call the function
call AddAttribute()
you will be prompted for a new attribute which will be added like in your example. You can bind a key for this with something like:map <F5> :call AddAttribute<CR>
so you just hit F5 in order to add this line.Edit
If you want to duplicate all lines with
attributeA
(which doesn't make sense to me), you could do that with this mapping (^M
is CTRL+v and then Enter):When you hit F5 you are prompted for a new attribute and alle lines containing
attributeA
are duplicated and substituted with your input.Having the solution be a one-liner as a requirement seems a little odd, since you can assign any sequence of keystrokes or any function or command to a keypress in Vim if you like.
That being said, this type of thing is Vi's bread and butter. Try:
where
executes commands on each line matching
pattern
(see:help :global
),copies the current line (see
:help :copy
) matched by:g
to after the address.
(meaning the current line), andthen performs a substitution on the current line (see
:help :substitute
), i.e. the copy you just made. Theg
flag at the end causes the substitution to be performed for all matching patterns in the line, not just the first. Also note that I left the search pattern empty: Vim will remember the last search pattern used in the previous:global
or:substitute
command as a convenience.