在vim中填充多行C宏

时间:2016-10-06 09:34:59

标签: vim

我有C宏,如:

#define  MY_MACRO() \
            xxxxx xxxxxxx \
            xxxxxx xxxxxxx \
            xx xxxxxxxxxx xxxxxx x xxxxxxx xxxxxxxx \
            xxxxx                   \
                xxxxxx xxxxxxx                \
                xxxxxx x xxxxxxxxx xx xxxxxxxxx x \
                        xxxxxxxxxx xxxxxxxxxxxxxx \
                    x   xxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxx \
                xxxxxx x xxxxxx x xxxxxxxx x xxxxxx x xxxxxxxxx \
            x \
            xxx x xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  \
                           xxxxxxxxxxxxxxxxxxxxxxxxx xxx  \
                 xxxxx \
            xxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx x \
            x xx xx xxxxxxx

我正试图将它们填入:

#define  MY_MACRO()                                                            \
            xxxxx xxxxxxx                                                      \
            xxxxxx xxxxxxx                                                     \
            xx xxxxxxxxxx xxxxxx x xxxxxxx xxxxxxxx                            \
            xxxxx                                                              \
                xxxxxx xxxxxxx                                                 \
                xxxxxx x xxxxxxxxx xx xxxxxxxxx x                              \
                        xxxxxxxxxx xxxxxxxxxxxxxx                              \
                    x   xxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxx                      \
                xxxxxx x xxxxxx x xxxxxxxx x xxxxxx x xxxxxxxxx                \
            x                                                                  \
            xxx x xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx                              \
                           xxxxxxxxxxxxxxxxxxxxxxxxx xxx                       \
                 xxxxx                                                         \
            xxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx x                         \
            x xx xx xxxxxxx

这些行应该是80个字符。

'<,'>s/\(.*[^\s]\)\s*\\\s*$/\=printf('%-79s\', submatch(1))
除了诸如以下的行之外,

主要是这样做的。

        xxxxxx xxxxxxx                                                                              \

超过80个字符限制,以明星为主。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

printf() width 说明符仅将填充添加到增加字符串。如果它已经大于宽度,它不会切断任何东西。

您的正则表达式尝试通过从匹配组中排除尾随空格来限制匹配。不幸的是,这不起作用:[^\s]。您不能在集合中使用\w之类的原子。使用相应的字符类([^[:white:]]),或者,如果可用,使用否定原子:\S。通过此修复,您的替换工作正常:

'<,'>s/\(.*\S\)\s*\\\s*$/\=printf('%-79s\', submatch(1))