【问题标题】:Vim, LaTeX, word-wrapping, and version controlVim、LaTeX、自动换行和版本控制
【发布时间】:2011-02-12 05:32:54
【问题描述】:

我正在用 vim 编写一个 LaTeX 文档,我将它硬包装为 80 个字符以使阅读更容易。但是,这会导致在版本控制中跟踪更改出现问题。例如,在本文开头插入“Lorem ipsum”:

1 Dolor sit amet,consectetur adipiscing elit。菜豆
2 quis 门。 Aenean 前庭 magna vel purus laoreet 在 molestie massa
3 怀疑。前庭前庭,mauris nec convallis ultrices,tellus sapien
4 ullamcorper elit, dignissim consectetur justo tellus et nunc。 

结果:

1 Lorum ipsum dolor sit amet, consectetur adipiscing elit。菜豆
2 lobortis lectus quis porta。 Aenean vestibulum magna vel purus laoreet at
3 molestie massa suscipit。前庭前庭,mauris nec convallis ultrices,
4tellus sapien ullamcorper elit, dignissim consectetur justo tellus et nunc.

当我在 git 中查看此更改时,它告诉我该段落的所有行都因换行而发生了更改,即使只发生了一次语义更改。解决此问题的一种方法是将每个句子放在自己的行上。这在呈现的文档中看起来是一样的,但现在源代码更难阅读,因为每一行都有完全不同的行长度:

1 Lorum ipsum dolor sit amet, consectetur adipiscing elit。
2 Phasellus bibendum lobortis lectus quis porta。
3 Aenean 前庭 magna vel purus laoreet 在 molestie massa suscipit。
4 前庭前庭、mauris nec convallis ultrices、tellus sapien ullamcorper elit、dignissim consectetur justo tellus et nunc。

(如果我在 80 岁时软包装,情况仍然看起来很糟糕,只是方式不同。)

是否可以将我的文本放在磁盘上,每个句子一个换行符,但在 vim 中显示和编辑它,就好像每个段落的文本是一长行,软包装为 80 个字符?我认为它需要一些 vim-foo 而不是调整 git 或 LaTeX。

【问题讨论】:

  • 嗯,之前看到过这个问题,我认为您对软包装作为解决方案的猜测是正确的,但不记得在哪里可以找到“vim-foo”...

标签: git version-control vim latex word-wrap


【解决方案1】:

无需引入奇怪的编辑策略:您正在寻找的git 功能正在使用git diff --color-words 来审查更改。

【讨论】:

  • 谢谢!这比我预期的要简单得多。
  • 澄清一下,git 仍然认为所有行都已更改,但它很好地突出显示已更改的单词。
  • @Bkkbrad:是的,它只会改变diff 向您呈现变化的方式。顺便说一句,对于 git、CVS 或 SVN,您可以将 vim 的差异视图与 vcscommand 插件 (code.google.com/p/vcscommand) 一起使用。除了已更改的块外,它还会突出显示已更改的单词。
  • 谢谢!我期待着玩弄它。
【解决方案2】:

我认为另一种方法是像我通常所做的那样更改 vim 窗口的宽度:

  1. 首先,在.vimrc中加入“set wrap”,开启“wrap”功能;

  2. 为了在虚拟终端中运行 vim,我总是将终端的窗口宽度设置为 80 个字符(如“urxvt -geometry 80x38”)。因此,每当我在虚拟终端中用 vim 编辑文件时,当一行包含超过 80 个字符时,它将自动换行。

  3. 如果您更喜欢 gvim (gtk-vim, gnome-vim),您可以通过在 .gvimrc 中添加一行来设置 gvim 窗口的大小,例如“set lines=38 columns=80”。

希望对您有所帮助。 :-)

【讨论】:

    【解决方案3】:

    我自己也一直在想这样的事情,最后我只需要尝试几种不同的方法来看看哪些方法有效。我绝对不满意的一件事是硬休息(可以通过set textwidth=80 实现),原因如下:

    • 每当我返回编辑以前的文本时,硬换行符就会出现在错误的位置。它要么超出我的 80 个字符限制,要么离我的 80 个字符限制太远。当然,我可以通过使用 gq 运算符的不同变体在 Vim 中解决这个问题(例如 gqipgqap、视觉模式,然后是 gq),但这很乏味,而且我经常错过我的目标区域gq。这对我来说是硬休息的最大缺点。 (如果您确实使用gq 来修正段落,您可能需要使用set nojoinspace 以避免在每个句点之后出现烦人的双空格。)
    • 我经常同时打开 Vim 和 PDF。每当我想在 PDF 的特定位置编辑某些内容时,我只需搜索文本片段。您会惊讶于文本中很少有地方以特定顺序使用两个相当常见的单词,因此这确实非常有效。除非您在要搜索的单词之间中断的句子中间有硬中断。在使用硬中断时,这会相当频繁地延迟我的工作流程。
    • 我经常使用fFtT 在句子中导航。这仅适用于同一行。
    • 还有 OP 提到的问题,即 Git 不能很好地处理断断续续的段落。当然,您仍然可以使差异看起来不错,所以这并不是什么大问题。

    对我来说,使用软中断(例如每行一个句子或段落)并不是我为适应 Git 而采用的“奇怪的编辑策略”。这是我用来在编辑时方便和高效的一种(也许很奇怪)编辑策略。特别是在我同意的单词中间出现的软换行看起来很难看,但可以使用 set linebreak 关闭。

    此外,如果您每行使用一个段落,您应该获得与硬中断(使用gq 正确维护)大致相同的“外观”,并且您可以使用@987654335 在句子之间导航@ 和 )。每行一个句子,你会得到一个更粗糙的右边缘,但 Git 和 Vim 提供的优势是每行一个句子。两者都试一下,看看你喜欢什么(我自己还没决定)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2018-05-24
      • 2016-04-14
      • 2022-07-27
      • 2018-06-16
      • 2011-02-18
      相关资源
      最近更新 更多