编辑之争:在句子末尾保留换行符

7

当编辑非所见即所得(LaTeX、HTML等)散文时,您可能希望在句子末尾有换行符。

这样做有几个优点:

  1. 更容易重新排列句子。
  2. 更容易注释掉句子。
  3. 更容易发现过长的句子。
  4. 更容易对句子进行评论。

例如:

% The following isn't strictly true; maybe excise or comment out for now:
After all, people who use Word or other WYSIWYG editors are aiding and 
abetting terrorists.

可能最重要的优势是它使版本控制下的协作编辑更加容易。否则,你将遇到冲突,只会通知你“这个大段落的以下两个版本存在冲突”。
但是保持句子末尾的换行符说起来容易做起来难...
As you edit the prose
it will get all chopped up, like this.
Normally you'd do a "reformat paragraph"
to clean it up, but then
you lose the newlines at the ends of your sentences!

以下问题询问如何在emacs中解决此问题:

如何使Emacs填充句子,而不是段落?

我想知道人们如何在其他编辑器中处理这个问题,包括vim、TeXShop、TextMate和任何你认为有用的编辑器。关于软换行和硬换行的建议也是受欢迎的。

这一切似乎是为了解决diff的限制而刻意制造的。为什么不创建一个句子敏感的diff,而要对源代码进行修改呢? - hadley
它如何知道何时应该基于行,何时应该基于句子?无论如何,我认为1到4个原因足以令人信服,我不认为这是人为的。我认为最大的缺点是使您的文档更少紧凑。 - dreeves
使用软换行编辑器? - garrow
7个回答

3

我认为最简单的解决方案是只在句号后添加换行符。这样,您的编辑就永远不会分割行。

请注意,对于散文,您可以完全依赖编辑器的自动换行功能来换行长句子 - 除非您要像处理代码一样缩进它(我在LaTeX中不太缩进)。


这肯定能行,但我最初拒绝它(仍然愿意被说服),因为它对我的合作者的编辑器选择提出了要求。 - dmckee --- ex-moderator kitten
人们肯定会使用设置不正确的编辑器。你的情况可能有所不同,一切视具体情况而定。 - dmckee --- ex-moderator kitten

1
无论你做什么,请不要在协作环境中使用自动硬换行整个文档的编辑器。朋友们不会让朋友使用WinEdt。

1
在vim中,您可以使用gw)填充到当前句子的末尾。它不会为您重新格式化整个段落或区域,但是如果您小心地在每个句子后插入换行符,并且在编写时使用gw)进行重新格式化,它会非常好用。

1

Vim:

你可以关闭文本换行 (set formatoption-=t),这样它就不会添加换行符,除非你按下回车键。更好的是,如果你能够设置'comments'选项,使其识别你的注释,你可以仅为注释设置自动换行宽度,而不是其他任何内容:

set comments=b:%
set textwidth=80
set formatoption+=c
set formatoption-=t

这是我使用的方法,使得我的注释整洁,但除非我自己这样做,否则我的代码不会被搞乱。

1

一个普通的文本编辑器不应该试图更改你所写的文件,除非你明确要求它这样做。它可以为了可读性而更改文件在屏幕上的外观,但仅此而已。

因此,在我的经验中,大多数体面的编辑器都会进行软换行,并保留您插入的换行符。

就是这样。我必须承认,我看不出有什么大惊小怪的,除非你使用一些坚持进行硬换行并需要解决问题的奇怪文本编辑器。

如果你想保留格式以便于差异比较,只需在每个句子后进行换行,并接受差异比较将按句子级别工作。


0

你不想在句子末尾有换行符。

当然,按照你列出的4个步骤做起来更容易,但这并不值得与世界其他地方不同(即使世界的原因像CR LF = newline背后的推理一样愚蠢)。

而你最大的优势并不是真的:

否则,你会遇到冲突,它只会通知你“这个巨大段落的以下两个版本存在冲突”。

它怎么知道何时基于行,何时基于句子?

你可以使用Meld或类似的diff工具让它完成工作。


你有注意到他在谈论编辑LaTeX文档源代码的类似情况吗?这里输入文件的形状对格式化输出的形状影响有限。而且是在协作环境下进行的?这是一个特殊的问题。干杯。 - dmckee --- ex-moderator kitten
是的,即使在 HTML / LaTeX 中,空格和换行在某些情况下确实具有意义。而且仅仅无视它们会让你陷入麻烦,特别是如果你想要进行协作工作。 - oberhamsi

0

我想知道其他编辑器是如何处理这个问题的。

顺便提一下,在Windows平台上,Zeus编辑器有一个可配置的右边距和一个内置的换行功能。

例如,将右边距设置为60个字符,标记您示例中的文本,然后使用宏,换行段落菜单,Zeus将重新格式化文本如下:

As you edit the proseit will get all chopped up, 
like this. Normally you'd do a "reformat 
paragraph"to clean it up, but thenyou lose the 
newlines at the ends of your sentences!

包装很,因为上面的所有行都插入了一个换行符。


是在“…this.”和“Normally…”之间的换行符我想要保留。 - dreeves
我想,一个解决方案是创建一个宏,将标记区域的所有行合并为一行,然后让宏通过替换所有句号/感叹号和新行来拆分该行。任何可编写脚本的编辑器(包括Zeus)都应该能够做到这一点。 - jussij
它必须要聪明地处理,因为有很多非句子结尾的句号和感叹号等等。 - dreeves
我认为脚本永远不会那么聪明。但是,通过让用户标记要格式化的文本区域,将智能放在了用户手中,这是正确的做法。无论如何,如果脚本出现错误,只需要简单的撤销命令就可以撤销损坏。 - jussij

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