Fare un plugin o codificarlo in vimscript sembra un po 'pesante. Credo in un vim senza plug-in e in una buona composizione con strumenti esterni.
Ecco un comando di 1 volta, basato su user2571881, che funziona anche se il buffer non è stato salvato.
:%!awk -F '|' '{print; sum+=$4}; END {print "Total: "sum}'
Se si desidera salvare questo comando per un utilizzo futuro, è possibile nominarlo:
:command! -range=% -nargs=1 SumColumn <line1>,<line2>!awk -F '|' '{print; sum+=$('<args>' + 1)} END {print "Total: "sum}'
Funziona con la selezione visiva. Se selezioni alcune righe e vai in modalità comando, vim farà precedere il tuo comando :'<,'>
, che è l'intervallo di linee per la selezione visiva. Quindi puoi eseguire:
:'<,'>SumColumn 3
e sommerà solo la terza colonna delle righe selezionate. Per impostazione predefinita, l'intervallo è %
, quindi
:SumColumn 3
sommerà la terza colonna di tutte le righe.
EDIT: Se vuoi essere in grado di specificare altri separatori di campi e di default la colonna conteggiata fino all'ultima, puoi coprire il comando bash
e gestire gli argomenti con esso, in questo modo:
:command! -range=% -nargs=* SumColumn <line1>,<line2>!bash -c 'awk -F ${2:-|} "{print; sum+=\$(${1:-NF - 2} + 1)} END {print \"Total: \"sum}"' sumcolumn <args>
Adesso,
:SumColumn
conterà l'ultima colonna di una tabella con "|" separatori di campo,
:SumColumn 3
conterà la terza colonna di una tabella con "|" separatori di campo e
:SumColumn 3 +
conterà la terza colonna di una tabella con i separatori di campo "+".