Search code examples
regexvimvi

Vim: How can I search and replace on just part of each line?


I've got a list of phrases with spaces:

Part One
Part Two
Parts Three And Four

I'd like to use Vim to process the list to produce this:

part_one,"Part One"
part_two,"Part Two"
parts_three_and_four,"Parts Three And Four"

I can get use this regex:

:%s/.*/\L\0\E,"\0"/

to get me to this, which is really close:

part one,"Part One"
part two,"Part Two"
parts three and four,"Parts Three And Four"

Is there any way to replace all spaces before the comma on each with underscores? Either as a modification of the above regex or as a second command?


Solution

  • Assuming there will never be commas in your original data, you should be able to use the following:

    :%s/.*/\L\0\E,"\0"/ | %s/ \([^,]*,\)\@=/_/g
    

    This just does another replacement after your current one to replace all of the spaces that come before a comma (using a positive lookahead).