Vim 在文本文件多行的第80列中插入字符
我编写了一个多行C宏,出于可读性原因,我想在每行的第80列中插入字符“\”。举个例子可能有助于理解我需要什么。 假设宏最初是这样的:Vim 在文本文件多行的第80列中插入字符,vim,sed,awk,Vim,Sed,Awk,我编写了一个多行C宏,出于可读性原因,我想在每行的第80列中插入字符“\”。举个例子可能有助于理解我需要什么。 假设宏最初是这样的: #define MY_MACRO \ expression \ a_longer_expression \ \ a_super_jumbo_size_expression \ macro_ends_here #define MY_MACRO \ expression \
#define MY_MACRO \
expression \
a_longer_expression \
\
a_super_jumbo_size_expression \
macro_ends_here
#define MY_MACRO \
expression \
a_longer_expression \
\
a_super_jumbo_size_expression \
macro_ends_here
我希望最终结果如下:
#define MY_MACRO \
expression \
a_longer_expression \
\
a_super_jumbo_size_expression \
macro_ends_here
#define MY_MACRO \
expression \
a_longer_expression \
\
a_super_jumbo_size_expression \
macro_ends_here
因此,每一行都应该用空格填充,从最后一个非空格字符到第79列,然后在第80列中插入“\”,包括空行
这是否可以使用vim、sed或awk实现?如果是,如何选择?选择所需的范围并输入以下ex命令:
:'<,'>s/\s*\\$/\=repeat(' ', 80-col('.')).'\'
它用一个表达式替换行尾的空格和\,该表达式在第80列之前重复空格,然后追加\字符。如果您的行大于80个字符,它将附加0个空格,这可能不是您想要的,在这种情况下,将80更改为79,并在字符串中添加空格:“\”在vim中使用g:和ve时有一种可能性: 如果要在修改后将ve设置回:
:g/\\$/set ve=all|exec 'normal $x80|r\'|set ve=""
还是awk
如果要在原地更改文件,请执行以下操作:
perl -i -lne 'if(/\\$/){s/[\s]*\\//g;printf "%-79s\\\n",$_}else{print}' your_file
我会用这个插件
awk将在诸如宏“ends”之类的行中添加反斜杠,此处请尝试awk“/\\$/{sub/$/,;printf%s%80长度,$0,\\\n;next}1”file@sudo_O我也找到了,已经修好了你的建议将打印空行。thx无论如何都很好,但只有一个小问题。它在第79列而不是第80列插入“\”。这是通过更改…80长度。。。到…81长度。。。。!!为什么我忘了负号+1@Kent仅供参考,您也可以在填充值的格式字符串中使用*占位符作为参数,这样您就不需要拆分格式字符串来使用可变数量的空格,例如sprintf%s%*s,$0,80-length$0,\\而不是sprintf%s%80-length$0s,$0\\
perl -lne 'if(/\\$/){s/[\s]*\\//g;printf "%-79s\\\n",$_}else{print}' your_file
perl -i -lne 'if(/\\$/){s/[\s]*\\//g;printf "%-79s\\\n",$_}else{print}' your_file
:Tabularize /\\/l50r0