Зробити плагін або кодувати це у vimscript здається трохи важким. Я вірю в плагін без плагінів і гарну композицію із зовнішніми інструментами.
Ось одноразова команда на основі користувача 2571881, яка працює, навіть якщо буфер не був збережений.
:%!awk -F '|' '{print; sum+=$4}; END {print "Total: "sum}'
Якщо ви хочете зберегти цю команду для подальшого використання, ви можете назвати її:
:command! -range=% -nargs=1 SumColumn <line1>,<line2>!awk -F '|' '{print; sum+=$('<args>' + 1)} END {print "Total: "sum}'
Це працює з візуальним підбором. Якщо ви виділите кілька рядків і перейдете в командний режим, vim встановить префікс вашої команди :'<,'>
, що є діапазоном рядків для візуального вибору. Отже, ви можете запустити:
:'<,'>SumColumn 3
і він підсумовує лише 3-й стовпець вибраних рядків. За замовчуванням діапазон є %
, так
:SumColumn 3
підведе підсумок 3-го стовпця всіх рядків.
EDIT: Якщо ви хочете мати змогу вказати інші роздільники полів та за замовчуванням стовпчик, що відраховується до останнього, ви можете охопити команду в bash
та обробити з нею аргументи, як це:
:command! -range=% -nargs=* SumColumn <line1>,<line2>!bash -c 'awk -F ${2:-|} "{print; sum+=\$(${1:-NF - 2} + 1)} END {print \"Total: \"sum}"' sumcolumn <args>
Тепер,
:SumColumn
буде рахувати останній стовпець таблиці з "|" роздільники поля,
:SumColumn 3
буде рахувати 3-й стовпець таблиці з "|" роздільники полів та
:SumColumn 3 +
буде рахувати 3-й стовпець таблиці з роздільниками поля "+".