Membuat plugin atau coding ini dalam vimscript agak berat. Saya percaya pada vim bebas plugin, dan komposisi yang baik dengan alat eksternal.
Ini adalah perintah 1 kali, berdasarkan pada user2571881, yang berfungsi bahkan jika buffer belum disimpan.
:%!awk -F '|' '{print; sum+=$4}; END {print "Total: "sum}'
Jika Anda ingin menyimpan perintah ini untuk penggunaan di masa mendatang, Anda mungkin ingin memberi nama:
:command! -range=% -nargs=1 SumColumn <line1>,<line2>!awk -F '|' '{print; sum+=$('<args>' + 1)} END {print "Total: "sum}'
Ini bekerja dengan pemilihan visual. Jika Anda memilih beberapa baris dan masuk ke mode perintah, vim akan mengawali perintah Anda dengan :'<,'>
, yang merupakan rentang garis untuk pemilihan visual. Jadi Anda dapat menjalankan:
:'<,'>SumColumn 3
dan itu hanya akan menjumlahkan kolom ke-3 dari baris yang dipilih. Secara default kisarannya adalah %
, jadi
:SumColumn 3
akan menjumlahkan kolom ke-3 dari semua baris.
EDIT: Jika Anda ingin dapat menentukan pemisah bidang lainnya dan default kolom dihitung ke yang terakhir, Anda dapat menutup perintah di bash
dan menangani argumen dengan itu, seperti ini:
:command! -range=% -nargs=* SumColumn <line1>,<line2>!bash -c 'awk -F ${2:-|} "{print; sum+=\$(${1:-NF - 2} + 1)} END {print \"Total: \"sum}"' sumcolumn <args>
Sekarang,
:SumColumn
akan menghitung kolom terakhir dari tabel dengan "|" pemisah lapangan,
:SumColumn 3
akan menghitung kolom ke-3 tabel dengan "|" pemisah bidang, dan
:SumColumn 3 +
akan menghitung kolom ke-3 tabel dengan pemisah bidang "+".