Я не думаю, что это хорошая идея использовать здесь регулярные выражения. Идея, которую вы можете найти в решении @glenn jackman, написанном на vimscript, будет следующей:
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
Вы можете сохранить порядок вместо сортировки:
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