我有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个字符限制,以明星为主。
我做错了什么?
答案 0 :(得分:1)
printf()
width 说明符仅将填充添加到增加字符串。如果它已经大于宽度,它不会切断任何东西。
您的正则表达式尝试通过从匹配组中排除尾随空格来限制匹配。不幸的是,这不起作用:[^\s]
。您不能在集合中使用\w
之类的原子。使用相应的字符类([^[:white:]]
),或者,如果可用,使用否定原子:\S
。通过此修复,您的替换工作正常:
'<,'>s/\(.*\S\)\s*\\\s*$/\=printf('%-79s\', submatch(1))