Sam Borick
Sam Borick

Reputation: 955

Vim regex matching multiple results on the same line

I'm working on a project where I'm converting an implementation of a binary tree to an AVL tree, so I have a few files that contain lines like:

Tree<int>* p = new Tree<int>(*t);

all over the place. The goal I have in mind is to use a vim regex to turn all instances of the string Tree into the string AVLTree, so the line above would become:

AVLTree<int>* p = new AVLTree<int>(*t);

the regex I tried was :%s/Tree/AVLTree/g, but the result was:

AVLTree<int>* p = new Tree<int>(*t);

I looks to me like when vim finds something to replace on a line it jumps to the next one, so is there a way to match multiple strings on the same line? I realize that this can be accomplished with multiple regex's, so my question is mostly academic.

Upvotes: 1

Views: 1494

Answers (1)

Sam Borick
Sam Borick

Reputation: 955

Credit on this one goes to Marth for pointing this out. My issue was with vim's gdefault. By default it's set to 'off', which means you need the /g tag to make your search global, which is what I wanted. I think mine was set to 'on', which means without the tag the search is global, but with the tag the search is not. I found this chart from :help 'gdefault' helpful:

            command         'gdefault' on   'gdefault' off 
            :s///             subst. all      subst. one
            :s///g            subst. one      subst. all
            :s///gg           subst. all      subst. one

Upvotes: 2

Related Questions