Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 在文本文件多行的第80列中插入字符_Vim_Sed_Awk - Fatal编程技术网

Vim 在文本文件多行的第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 \

我编写了一个多行C宏,出于可读性原因,我想在每行的第80列中插入字符“\”。举个例子可能有助于理解我需要什么。 假设宏最初是这样的:

#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