我正在 Vi 中编写代码并使用文本par
格式化程序(类似于fmt
,但恕我直言更好)格式化块注释。问题是我无法par
保留用于缩进的文字选项卡。格式化程序将它们替换为空格。
显示每行带有初始制表符的文件以及如何par
用空格替换这些制表符的示例。该cat -t
命令将文字选项卡显示为^I
:
$ cat -t example.txt
^I# I'd like to reflow
^I# this paragraph while retaining
^I# the initial tabs. I don't want to end up with
^I# spaces at the start of
^I# these lines.
选项卡消失:
$ par <example.txt | cat -t
# I'd like to reflow this paragraph while retaining the initial
# tabs. I don't want to end up with spaces at the start of
# these lines.
如何停止par
替换缩进?
根据par
手册中的建议,我将环境变量设置PARINIT
为 cryptic string rTbgqR B=.,?'_A_a_@ Q=_s>|
,但我无法确定是否可以修改它以使其按照我想要的方式运行。
答案1
格式化par
程序总是将制表符扩展为空格,并且不能被告知执行其他操作。当T
字符位于字符串中时,实用程序在每个制表位使用 8 个空格$PARINIT
。par
可以使用以下命令重新插入已删除的制表符缩进,而不是尝试修改工作方式标准unexpand
公用事业:
$ par <example.txt | unexpand | cat -t
^I# I'd like to reflow this paragraph while retaining the initial
^I# tabs. I don't want to end up with spaces at the start of
^I# these lines.
当原始文本缩进多个制表符时,这也适用。
如果没有给出任何参数,该unexpand
实用程序将用最大数量的制表符替换每行开头的空白字符,以实现相同的视觉缩进级别。如果缩进级别需要,它还会在制表符后添加空格。
在 Vi 中,可以使用!par|unexpand
(前面有适当的寻址)来重新格式化文本。