7

我有一个非常大的数字(几百位数长),我想使用 vim 以适当的方式在数字上添加逗号,即在每组三位数之后,从右到左移动。我怎样才能有效地做到这一点?

4

4 回答 4

8

取自这里

在正确的位置添加逗号的替换命令。

:%s/\(\d\)\(\(\d\d\d\)\+\d\@!\)\@=/\1,/g

这使用零宽度前瞻来匹配任何后面不是由三个数字组成的组后面跟着一个数字的数字。(或 3n+1 个数字)

所以匹配的数字用 标记^。然后在匹配之后用逗号替换它们。

31415926
 ^  ^

替换为

31,415,926
于 2013-06-22T23:58:45.857 回答
1

我的一个朋友建议使用 printf 程序:ciw<C-r>=system("printf \"%'d\" ".shellescape(@"))<CR>.

于 2013-06-22T22:37:22.473 回答
1

这是一种方法:

s/\d\{-1,}\ze\(\d\{3}\)\+\s/&,/g

笔记:

  • \{-1,}说 match 至少 1 但以非贪婪的方式(Vim 似乎不支持通常的\+\?语法;另外,对于量词,你只需要转义左大括号)
  • \ze是说匹配这背后的模式,但不要将匹配存储在&(相当于积极的前瞻)
  • \(\d\{3}\)\+\>匹配以单词-非单词边界结尾的 3 位数字组(这个意义上的单词表示字母数字 + 下划线)。
    • 或者,您可以使用\s空格/制表符,或\D用于非数字而不是\>,以更适合您的需要
于 2013-06-23T00:52:15.703 回答
0

我使用的方法是创建一个添加一个逗号的宏,然后多次调用该宏,例如qahhi,<ESC>hq@a@a@a@a……</p>

于 2013-06-22T22:35:50.653 回答