Input
\sn{1}\gn{2}\gn{3}\sn{4}\sn{5}\gn{6}\gn{7}\sn{8}\yr{2012}
Required output
\sn{1}\sn{4}\yr{2012}
I used this code. but failed.
%s/\\sn{\([^}]*\)}.*\\sn{\([^}]*\)}.*\\yr/\sn{\1}\sn{\2}\yr{\3}/gec
Input
\sn{1}\gn{2}\gn{3}\sn{4}\sn{5}\gn{6}\gn{7}\sn{8}\yr{2012}
Required output
\sn{1}\sn{4}\yr{2012}
I used this code. but failed.
%s/\\sn{\([^}]*\)}.*\\sn{\([^}]*\)}.*\\yr/\sn{\1}\sn{\2}\yr{\3}/gec
the non-greedy in vimregex is .\{-} Take a look :h \{- for details.
So your :s cmd could be written in :
%s/\(\\sn{[^}]*}\).\{-}\(\\sn{[^}]*}\).\{-}\(\\yr{[^}]*}\).*/\1\2\3/g