gpt4 book ai didi

带有千位分隔符的状态栏中的 VIM 行数?

转载 作者:行者123 更新时间:2023-12-04 21:38:52 29 4
gpt4 key购买 nike

是否可以在带有千位分隔符的 VIM 状态栏中显示行数,最好是自定义千位分隔符?

例子:

set statusline=%L

应该导致“1,234,567”而不是“1234567”。

最佳答案

我找到了一种方法,但看起来有点疯狂:

set statusline=%{substitute(line('$')\,'\\d\\zs\\ze\\%(\\d\\d\\d\\)\\+$'\,'\,'\,'g')}

第一轮反斜杠只针对 set (我必须逃脱 ,\ 本身)。

我实际设置的选项是这个字符串:
%{substitute(line('$'),'\d\zs\ze\%(\d\d\d\)\+$',',','g')}

作为格式字符串,这一行包含一个格式代码,即 %{...} .一切尽在 ...被评估为一个表达式,并将结果替换回。

我正在评估的表达式是(添加了空格(如果我将它们添加到实际代码中,我将不得不再次将它们转义为 set,强制使用更多的反斜杠)):
substitute(line('$'), '\d\zs\ze\%(\d\d\d\)\+$', ',', 'g')

这是给 substitute 的电话功能。参数是源字符串、正则表达式、替换字符串和标志列表。

我们开始的字符串是 line('$') .此调用返回当前缓冲区中的行数(或者更确切地说是缓冲区中最后一行的行数)。这是什么 %L通常显示。

我们正在寻找的搜索模式是 \d(\d\d\d)+$ (删除了特殊的 vim 疯狂),即一个数字后跟 1 组或多组 3 位数字,然后是字符串的结尾。分组拼写为 \%( \)在 vim 中,“1 或更多”是 \+ ,这给了我们 \d\%(\d\d\d\)\+$ .最后一点魔法是 \zs\ze . \zs设置匹配字符串的开始; \ze结束。这就像 \zs 之前的所有内容一样有效是后视模式以及 \ze 之后的所有内容是一种前瞻模式。

这相当于:我们正在寻找源字符串中前面有一个数字,后面紧跟 N 个数字(其中 N 是 3 的倍数)的每个位置。这就像从右边开始向左移动,每次跳过 3 位数字。这些是我们需要插入逗号的位置。

这就是替换字符串: ',' (逗号)。因为我们匹配一个长度为 0 的字符串,所以我们有效地插入到源字符串中(通过将 '' 替换为 ',' )。

最后, g flag 说要对所有匹配项执行此操作,而不仅仅是第一个匹配项。

特尔;博士:
  • line('$')给我们行数
  • substitute(..., '\d\zs\ze\%(\d\d\d\)\+$', ',', 'g')在我们想要的地方添加逗号
  • %{ }让我们将任意表达式嵌入到 statusline
  • 关于带有千位分隔符的状态栏中的 VIM 行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42911131/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com