7

私は非常に大きな数 (数百桁) を持っており、vim を使用して適切な方法で数字にコンマを追加したいと考えています。つまり、3 桁の各グループの後に、右から左に移動します。これを効率的に行うにはどうすればよいですか?

4

4 に答える 4

8

ここから撮影

正しい場所にコンマを追加する置換コマンド。

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

これは、ゼロ幅の先読みを使用して、3 つの数字のグループとそれに続く 1 つの数字のグループが後に続かない任意の数字と一致させます。(または 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

これはそれを行う1つの方法です:

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

ノート:

  • \{-1,}少なくとも 1 に一致すると言っていますが、貪欲ではない方法です (Vim は通常の\+\?構文をサポートしていないようです。また、量指定子の場合は、開始中括弧をエスケープするだけで済みます)。
  • \zeこの背後にあるパターンに一致すると言っていますが、一致を保存しません&(正の先読みと同等)
  • \(\d\{3}\)\+\>単語と非単語の境界で終わる 3 桁のグループに一致します (この意味での単語は、英数字 + アンダースコアを意味します)。
    • \sまたは、スペース/タブ、または\Dの代わりに非数字の\>いずれか、ニーズに適した方を使用できます
于 2013-06-23T00:52:15.703 に答える
0

私が使用した方法は、カンマを 1 つ追加するマクロを作成し、そのマクロを何度も呼び出すというものでした。たとえばqahhi,<ESC>hq@a@a@a@a…</p>

于 2013-06-22T22:35:50.653 に答える