![如何在 Linux 中对齐纯文本?](https://linux22.com/image/1246343/%E5%A6%82%E4%BD%95%E5%9C%A8%20Linux%20%E4%B8%AD%E5%AF%B9%E9%BD%90%E7%BA%AF%E6%96%87%E6%9C%AC%EF%BC%9F.png)
我正在编写一个纯文本 (.txt) 文档,其中包含左右对齐的段落。我手动添加空格,必要时用连字符分隔单词,直到行的长度一致。以我的文档为例,段落如下:
这些幻影球有一些奇怪的特性,有些很巧妙,有些 有些很有趣,有些则只是懒惰的设计。它们几乎都是 都是由相同的设计缺陷造成的:游戏把它们当成普通的 球。
最终看起来会像这样:
这些幻影球有一些奇怪的特性, 有些很巧妙,有些很有趣,还有一些只是表明 懒惰设计造成的。它们几乎都是由 相同的设计缺陷:游戏对待他们太像 普通球。
我怎样才能做到这一点?
可以添加空格(不分行),但我需要控制段落的目标宽度(以 # 个字符为单位)。上面的示例设置为每行 53 个字符,但我的实际文档中的行宽从 60 到 79 不等。
如果有具有此类功能的文本编辑器就太好了。
我已经尝试过了:
- 开发办公室和TeX:他们只是使用格式来改变文本的显示方式。
- 纳米的 Justify 命令不算数,因为它实际上并没有使线条宽度均匀。
我接受了以下答案,因为它最适合我我发现 emacs fill 命令是所有答案中最容易使用的,而且我很欣赏它如何识别非空白缩进(例如 # 和 // 注释)。但是,其他答案都各有千秋,我建议访问此问题的其他人也看看它们。
答案1
您可以在 emacs 中使用fill-paragraph
或fill-region
(填写文件)。
您需要传递一个数字前缀参数。默认填充列为 70。
选择要填充的文本并执行M-3 M-x fill-region
。
我将您的示例文本的填充列设置为 53,并得到:
These phantasmic balls have some strange properties,
some neat, some interesting, and others just
indicative of lazy design. They're almost all caused
by the same design flaw: The game treats them too
much like regular balls.
答案2
你需要par
(官方网站,源代码,Repology 上的包状态)
例如,要在 ubuntu 上获取它,请执行以下操作:
sudo aptitude install par
对齐text.txt
(宽度为 80 个字符),保存为newtext.txt
:
par j1w80 < text.txt > newtext.txt
在 vim 或 gvim 中使用 par:
:set formatprg=par\ j1w80
然后突出显示要格式化的文本并使用该gq
命令。
有关详细信息,请参阅man par
答案3
fmt
是老派的解决方案
从手册页中:
fmt [-cmnps] [-d 字符] [-l 数字] [-t 数字] [目标 [最大值] | -宽度 | -w 宽度] [文件 ...]
和
目标长度默认为 65,最大为比目标长度多 10。或者,可以通过在其前面添加连字符或使用 -w 来指定单个宽度参数。例如,
fmt -w 72'',
fmt -72'' 和“fmt 72 72”都产生相同的输出。
答案4
您可以尝试 Perl 脚本reformat
。但是,它无法正确对齐多字节字符的文本,并且不使用连字符。
您可以通过运行在 Debian/Ubuntu 上安装它sudo apt-get install reformat
。
使用方式如下:
reformat -w 53 -j < mytext.txt
对齐的文本将被写入标准输出:
These phantasmic balls have some strange properties,
some neat, some interesting, and others just
indicative of lazy design. They're almost all caused
by the same design flaw: The game treats them too
much like regular balls.