Criar um plugin ou codificá-lo no vimscript parece um pouco pesado. Eu acredito em um vim livre de plugins e boa composição com ferramentas externas.
Aqui está um comando único, com base nos user2571881, que funciona mesmo que o buffer não tenha sido salvo.
:%!awk -F '|' '{print; sum+=$4}; END {print "Total: "sum}'
Se você deseja salvar este comando para uso futuro, convém nomeá-lo:
:command! -range=% -nargs=1 SumColumn <line1>,<line2>!awk -F '|' '{print; sum+=$('<args>' + 1)} END {print "Total: "sum}'
Funciona com seleção visual. Se você selecionar algumas linhas e entrar no modo de comando, o vim prefixará seu comando :'<,'>
, que é o intervalo de linhas para a seleção visual. Então você pode executar:
:'<,'>SumColumn 3
e somará apenas a terceira coluna das linhas selecionadas. Por padrão, o intervalo é %
, então
:SumColumn 3
somará a terceira coluna de todas as linhas.
EDIT: Se você quiser especificar outros separadores de campos e usar como padrão a coluna contada até a última, poderá cobrir o comando bash
e manipular os argumentos com ele, assim:
:command! -range=% -nargs=* SumColumn <line1>,<line2>!bash -c 'awk -F ${2:-|} "{print; sum+=\$(${1:-NF - 2} + 1)} END {print \"Total: \"sum}"' sumcolumn <args>
Agora,
:SumColumn
contará a última coluna de uma tabela com "|" separadores de campo,
:SumColumn 3
contará a terceira coluna de uma tabela com "|" separadores de campo e
:SumColumn 3 +
contará a terceira coluna de uma tabela com separadores de campos "+".