Universal ctags points the cursor to line numbers rather than the actual definition (as language servers do). Vim uses ex (:h Ex-mode) commands as destinations. We want to generate call cursor(line,col) for each identifier.

fn processStr(l) := let val s := l->1 val line := split s /[ (:]+/ val col := #line.1 + 1 val outLine := sprintf '%s\t%s\tcall cursor(%i,%i)' (line.2 . fp . l->2 . col) in outLine end;

processStr¨{%/fn +[[:lower:]][[:latin:]]*.*:=/}{(`0 . ix)}

This is simple-minded but suited to Jacinda.