string - Moving Columns/Text in VIM -


i wondering how might go moving around columns/text around in vim using string. have short list of names have reorder, need placed in last name first middle first middle last.

so here example list:

  • plant, robert a.
  • page, jimmy
  • bonhham, john h.
  • jones, john paul

i thinking string should this:

:s/\([a-z]\{2}\)\(\[a-z]\{2}\)/2\1/ 

thanks

first, recommend using \v "very magic" flag avoid other internal escaping of metacharacters. work replacement like:

 :s/\v([a-z]+),\s+([a-z]+)(\s+[a-z.]+)?/\2\3 \1 

breaking down:

  • ([a-z]+) capture last name \1
  • ,\s+ literal comma , 1 or more spaces
  • ([a-z]+) capture first name \2
  • (\s+[a-z.]+)? capture middle name with leading spaces, since may not exist. permit ., , end ? make whole construct optional, \3
  • \2\3 \1 replace second group (first name) followed middle name \3 no space in between because space captured along middle name. append \1 last name.

if names possibly more [a-z]+, may alternatively use [\s]+ capture non-whitespace characters.


Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -