Vim 如何(以良好的渐进复杂性)从(非常长的)行中删除所有特定字符?

Vim 如何(以良好的渐进复杂性)从(非常长的)行中删除所有特定字符?,vim,Vim,我有一行2590万个字符,其中240万个是逗号,我想删除行中的所有逗号 如果我使用命令:s/,//g,它将构造一个正则表达式,并在该行上重复运行,直到没有逗号为止。根据经验测量,这似乎在O(n^2)时间内运行。因此,我的正则表达式在这行上运行了一个多小时 使用宏是不好的,因为发生重画,当你处于这样一个长行的中间时,它往往有点贵。 拆分行似乎是最好的选择,但由于文件的结构,我需要创建一个新的缓冲区来干净地执行此操作 是的,有更好的方法来输出这么多数据,而不涉及具有荒谬列数的CSV,让我们假设我没有

我有一行2590万个字符,其中240万个是逗号,我想删除行中的所有逗号

如果我使用命令
:s/,//g
,它将构造一个正则表达式,并在该行上重复运行,直到没有逗号为止。根据经验测量,这似乎在O(n^2)时间内运行。因此,我的正则表达式在这行上运行了一个多小时

使用宏是不好的,因为发生重画,当你处于这样一个长行的中间时,它往往有点贵。 拆分行似乎是最好的选择,但由于文件的结构,我需要创建一个新的缓冲区来干净地执行此操作

是的,有更好的方法来输出这么多数据,而不涉及具有荒谬列数的CSV,让我们假设我没有生成它,但我有它,我必须使用它


有没有一种渐进快速的方法可以简单地从vim中的一行中删除每一个出现的特定字符?

作为文本编辑器,vim不太适合这种病态格式的文件(正如您已经发现的那样)

正如其他人已经评论的那样,
tr
是删除逗号的一个好选择。外部:

$ tr -d , input.txt
或者从Vim内部:

:.! tr -d ,
Vim还具有内置的低电平功能。不幸的是,它不处理删除,只处理转换。您可以使用它将当前行中的逗号更改为分号,如下所示:

:call setline('.', tr(getline('.'), ',', ';'))

你愿意使用vim以外的东西吗?这看起来更像是命令行
tr
的工作,而不是vim的工作,这最终就是我要做的。谢谢。虽然我仍然同意vim不是最好的工具,但您可以使用
:set lazyredraw
(请参见
:h lz
)解决宏重画问题