我编写了一个多行C宏,出于可读性的考虑,我想在每行的第80列插入字符'\'.一个例子可能有助于理解我需要什么.假设宏最初是这样的:
#define MY_MACRO \
expression \
a_longer_expression \
\
a_super_jumbo_size_expression \
macro_ends_here
Run Code Online (Sandbox Code Playgroud)
我希望最终结果是这样的:
#define MY_MACRO \
expression \
a_longer_expression \
\
a_super_jumbo_size_expression \
macro_ends_here
Run Code Online (Sandbox Code Playgroud)
因此,每行应填充从最后一个非空格字符到第79列的空格,然后在第80列中插入'\',包括空行.
这可能使用vim,sed或awk吗?如果是,怎么样?
选择所需的范围并输入以下ex命令:
:'<,'>s/\s*\\$/\=repeat(' ', 80-col('.')).'\'
Run Code Online (Sandbox Code Playgroud)
在行的末尾用空格和\替换表达式,该表达式在第80列之前重复一个空格,然后附加一个\字符.如果您的行超过80个字符,它将附加0个空格,这可能不是您想要的,在这种情况下,将80更改为79并为字符串添加空格:' \'
在vim一种可能性摆弄g:和ve:
:g/\\$/set ve=all|normal $x80|r\
Run Code Online (Sandbox Code Playgroud)
如果你想在修改后设置ve回来"":
:g/\\$/set ve=all|exec 'normal $x80|r\'|set ve=""
Run Code Online (Sandbox Code Playgroud)
或者awk
awk '/\\$/{sub(/\\$/,"");$0=sprintf("%s%"80-length($0)"s",$0,"\\")}7' file
Run Code Online (Sandbox Code Playgroud)