gpt4 book ai didi

regex - Vim 获取匹配行的长度

转载 作者:行者123 更新时间:2023-12-02 05:24:22 27 4
gpt4 key购买 nike

我正在尝试使用 vim 替代命令将特定类型的 C 代码转换为宏代码。这个例子片段

#define LIST_GEN_FUNCS(TYPE)
struct list_##TYPE* list_generate() {
struct list_##TYPE* ret = malloc(sizeof(struct list));
ret->len = 0; ret->first = 0;
return ret;
}

需要看起来像这样:

#define LIST_GEN_FUNCS(TYPE)                               
struct list_##TYPE* list_generate() { \
struct list_##TYPE* ret = malloc(sizeof(struct list)); \
ret->len = 0; ret->first = 0; \
return ret; \
} \

为此,我需要一种方法来用空格填充所有列直到固定的行长度,然后在每行结尾后添加“\”。

%s/$/\= submatch(0) . " " . repeat(" ", 78 - LENGTH_OF_LINE)

现在,这是我的问题。我无法找到如何获得匹配线的长度。谁能告诉我,要插入什么作为 LENGTH_OF_LINE?

最佳答案

一种解决方案是在行尾添加空格,然后删除到特定列。例如:

:%norm80A <C-v><Esc>d80|s\<cr>

<C-v><Esc>插入文字 ^[字符和 <cr>结束命令。

如果你想在 VimL 中找到一行的长度,你可以使用 strlen(getline(6))例如,如果您想获得第 6 行的长度。如果您想将其实现到您现有的解决方案中,您可以这样做

:%s/$/\=repeat(" ", 79-strlen(getline(".")))."\\"

正如 Zyx 在评论中所说,更好的方法是

:%s/$/\=repeat(" ", 80-virtcol("$"))."\\"

关于regex - Vim 获取匹配行的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13324093/

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