如何在 Vim 编辑器中进行对齐调整?

4

我希望使用Vim编辑长文本(散文/非代码),并以格式良好的方式进行编辑。

让我们考虑这个文件:

lorem_original screenshot

我可以使用句子、段落等Vim功能,但是长句子的格式有点丑陋/难以阅读。

因此,我希望在严格固定的列宽(例如列宽 = 正好100)下进行对齐。

我已经安装了一些测试工具par unix命令行实用程序(sudo apt-get install par)并设置Vim使用它(使用“justify”标志):

:set formatprg=par\ jw100

执行vim命令:

gqG

但是没有完美的乐趣,可以在此处查看屏幕截图:

not-perfect alkignement using par

正如您所见,我没有精确地将文本对齐到100个字符。为什么?可能是因为par无法识别一些>8位字符(这里是意大利语文本)?

事实上还存在第二个问题:我不想永久转换原始文本以使其对齐并破坏原始句子(引入空格/新行),而是只想查看文本,保留原始文本不变。有一种格式化查看模式的方法吗?

3个回答

1

Vim有:set wrap,就是这样。记住,它不是所见即所得的编辑器,因此查看对齐文本超出了范围。

你确实需要转换物理文本(来回)。如果par实用程序无法正常工作(我认为它应该处理UTF-8编码的文本;检查您的$LANG值),您也可以尝试使用Vim附带的$VIMRUNTIME/macros/justify.vim脚本。


实际上,$LANG=en_US.UTF-8,而我报告的文本是意大利语。使用英文文本可以正确地运行。 - Giorgio Robino
我安装了意大利语环境($sudo locale-gen it_IT.UTF-8; export LANG='it_IT.UTF-8'),并在vim中检查:确认vim现在理解意大利语(Lingua in uso: "LC_CTYPE=it_IT.utf8;LC_NUMERIC=C;LC_TIME=it_IT.utf8;LC_COLLATE=it_IT.utf8;LC_MONETARY=it_IT.utf8;LC_MESSAGES=it_IT.utf8;LC_PAPER=it_IT. utf8;LC_NAME=it_IT.utf8;LC_ADDRESS=it_IT.utf8;LC_TELEPHONE=it_IT.utf8;LC_MEASUREMENT=it_IT.utf8;LC_IDENTIFICATION=it_IT.utf8" ),但上述格式仍然无法正常工作。 - Giorgio Robino

1

要暂时使用par对您的文件进行处理,请确保已保存该文件,然后使用:!par jw100 <% | less命令,它将显示一个只读可滚动的100个字符版式化版本。完成后,按q,然后按Enter

以下是Lorem Ipsum文本的示例:

enter image description here


为了给录屏加一分 :-) 但是也许不用 vim 而使用更轻量级的编辑器会更好,特别是当处理大文件时。 - Giorgio Robino
也许吧,我刚刚在一份13052行的文件(《福尔摩斯探案集》)上尝试了一下,几乎是瞬间完成的。不过,我相信Emacs中肯定有内置的对齐功能,值得去查一下。 - tlehman
谢谢Tobi!我现在正在尝试理解为什么par不能对意大利语文本进行对齐(请参见此处的评论https://dev59.com/aYfca4cB1Zd3GeqPg0zB#28202391?noredirect=1#comment44787166_28188169) - Giorgio Robino

0
一个用于实现这个目标的正则表达式:
:%s/\([^,]\{100}\)/\1\r/g

也可以在行尾使用连字符将单词分开:hyphen
:%s/\(\w\)$\n\(\w\)/\1-\r\2/g

等等,诸如此类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接