gpt4 book ai didi

regex - 如何通过替换在 Vim 中的两个字符串之间至少包含 n 个空格?

转载 作者:行者123 更新时间:2023-12-01 12:46:35 24 4
gpt4 key购买 nike

我有一个文本文件,每行有两个不同长度的单词。为了更好地阅读,我希望每行的第二个单词前面有足够的空格字符,以便与以下所有行的第二个单词对齐。

例如,给定文本:

bla foo
barbla barfoo
foblaaaa Bablofoo

我想改成:

bla      foo
barbla barfoo
foblaaaa Bablofoo

是否可以通过 Vim 中的正则表达式(例如,s/…/…/g)以某种方式格式化文件?类似下面的内容,

:s/^\(\w\+\)\s*\(.*\)$/\1\t\t\t\2/g

但需要动态调整必要的空白量?

最佳答案

这可能不是正则表达式的工作,因为您必须首先遍历文件然后开始包含空格来计算第一个单词的最大宽度。

如果您真的想像@Prince Goulash 建议的那样避免 Tabular,这里有一个有趣且简单的解决方案:

let n = system("awk '{ if (length($1) > L) { L = length($1) }}; END { print L }' ".expand("%:p"))
%s/\s\+/\=repeat(' ', n+1-system("awk '{ print length($1) }'", getline('.')))

在第一行中,变量n 将接收一个小awk 程序的输出。它基本上找到第一个字段的最大宽度,这是第一个工作。请注意末尾的 expand("%:p"):我们不是简单地传递文件名,而是将其扩展为完整路径,这样您就可以避免与当前目录混淆。

下一行是实际的替换。它用表达式替换找到的第一组空白。表达式返回一串重复一定次数的空格,也就是n(最大宽度)减去当前行第一个字的长度(又是awk求助!)再加上一个缓冲空间(你可以使用 2 或任何你想要的数字)。

这将使一切对齐。


如果你想安装表格,然后打开你的缓冲区并运行:

:Tab / 

注意正斜杠后有一个空格。

现在是一百万美元的问题:您要安装 Tabular 吗?

关于regex - 如何通过替换在 Vim 中的两个字符串之间至少包含 n 个空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5975139/

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