Faire un plugin ou le coder en vimscript semble un peu lourd. Je crois en un vim sans plugin et une bonne composition avec des outils externes.
Voici une commande unique, basée sur celle de user2571881, qui fonctionne même si le tampon n'a pas été enregistré.
:%!awk -F '|' '{print; sum+=$4}; END {print "Total: "sum}'
Si vous souhaitez enregistrer cette commande pour une utilisation future, vous pouvez la nommer:
:command! -range=% -nargs=1 SumColumn <line1>,<line2>!awk -F '|' '{print; sum+=$('<args>' + 1)} END {print "Total: "sum}'
Cela fonctionne avec la sélection visuelle. Si vous sélectionnez quelques lignes et passez en mode commande, vim préfixera votre commande :'<,'>
, qui est la plage de lignes pour la sélection visuelle. Vous pouvez donc exécuter:
:'<,'>SumColumn 3
et il additionnera seulement la 3ème colonne des lignes sélectionnées. Par défaut, la plage est %
, donc
:SumColumn 3
additionnera la 3ème colonne de toutes les lignes.
EDIT: Si vous souhaitez pouvoir spécifier d'autres séparateurs de champs et par défaut la colonne comptée jusqu'à la dernière, vous pouvez couvrir la commande bash
et gérer les arguments avec, comme ceci:
:command! -range=% -nargs=* SumColumn <line1>,<line2>!bash -c 'awk -F ${2:-|} "{print; sum+=\$(${1:-NF - 2} + 1)} END {print \"Total: \"sum}"' sumcolumn <args>
Maintenant,
:SumColumn
comptera la dernière colonne d'une table avec "|" séparateurs de champ,
:SumColumn 3
comptera la 3ème colonne d'un tableau avec "|" séparateurs de champ, et
:SumColumn 3 +
comptera la 3ème colonne d'un tableau avec des séparateurs de champ "+".