Vim 中的列总计

问题描述 投票:0回答:2

有谁知道如何在 Vim 中对表中的所有列求和,而不使用 AWK 或 SED,而是使用 vimscript?

我想选择要求和并具有以下值的列

像这样:

2,50       € 2,50
25         € 2.200,40
0,30       € 0,309
100        € 1.400,3
23,50      € 23,5
--------------------
Sum col1   Sum col2

这是一个有 2 列的示例,但我经常有更多列。
我使用 awk 时遇到的问题是它无法处理小数分隔符“,”和千位分隔符“.”

vim sum
2个回答
3
投票

我建议查看 csv.vim 源代码,它在 ftplulgin 中有一个

SumColumn
函数 IIRC。


0
投票

我非常需要这个,所以它需要变得更容易。

将以下内容添加到我的

.vimrc
,现在可以:

  • 直观地选择列
  • 将其拉入默认寄存器(
    y
    )
  • 正常模式下的
  • <Leader>s
    将求和结果复制到
    *
    寄存器

    *
    寄存器可能不适用于您的vim版本,但您可以将其从
    let @* = ...
    更改为
    let @" = ...
    ,或任何您想要将结果保存到的寄存器)
  • 在正常模式下粘贴结果
    p
function Sum()
    let @* = system("awk '{total+=$1}END{print total}'", @")
endfunction

function Sub()
    let @* = system("awk '{total-=$1}END{print total}'", @")
endfunction

nnoremap <silent> <Leader>s :call Sum()<CR>
nnoremap <silent> <Leader>x :call Sub()<CR>
© www.soinside.com 2019 - 2024. All rights reserved.