I donβt think itβs nice to use regular expressions here. The same thing you can find in the @glenn jackman solution written in vimscript will be as follows:
function JoinLog() let d={} g/\v^\S+\s/let [ds, k, t; dl]=matchlist(getline('.'), '\v^(\S+)\s+(.*)') | \let d[k]=get(d, k, [])+[t] %delete _ call setline(1, map(sort(keys(d)), 'v:val." ".join(d[v:val], ", ")')) endfunction
You can keep order instead of sorting:
function JoinLog() let d={} let ordered=[] g/\v^\S+\s/let [ds, k, t; dl]=matchlist(getline('.'), '\v^(\S+)\s+(.*)') | \if has_key(d, k) | let d[k]+=[t] | \else | let ordered+=[k] | let d[k]=[t] | \endif %delete _ call setline(1, map(copy(ordered), 'v:val." ".join(d[v:val], ", ")')) endfunction
source share