Hacer un complemento o codificar esto en vimscript parece un poco pesado. Creo en un vim sin complementos y una buena composición con herramientas externas.
Aquí hay un comando de 1 vez, basado en user2571881, que funciona incluso si el búfer no se ha guardado.
:%!awk -F '|' '{print; sum+=$4}; END {print "Total: "sum}'
Si desea guardar este comando para usarlo en el futuro, puede nombrarlo:
:command! -range=% -nargs=1 SumColumn <line1>,<line2>!awk -F '|' '{print; sum+=$('<args>' + 1)} END {print "Total: "sum}'
Funciona con selección visual. Si selecciona algunas filas y entra en modo de comando, vim agregará un prefijo a su comando :'<,'>
, que es el rango de línea para la selección visual. Para que pueda ejecutar:
:'<,'>SumColumn 3
y solo sumará la tercera columna de las filas seleccionadas. Por defecto el rango es %
, entonces
:SumColumn 3
sumará la 3ra columna de todas las líneas.
EDITAR: si desea poder especificar otros separadores de campo y predeterminar la columna contada hasta el último, puede cubrir el comando bash
y manejar los argumentos con él, de esta manera:
:command! -range=% -nargs=* SumColumn <line1>,<line2>!bash -c 'awk -F ${2:-|} "{print; sum+=\$(${1:-NF - 2} + 1)} END {print \"Total: \"sum}"' sumcolumn <args>
Ahora,
:SumColumn
contará la última columna de una tabla con "|" separadores de campo,
:SumColumn 3
contará la tercera columna de una tabla con "|" separadores de campo, y
:SumColumn 3 +
contará la tercera columna de una tabla con separadores de campo "+".