代码之家  ›  专栏  ›  技术社区  ›  Bkkbrad

VIM、乳胶、文字包装和版本控制

  •  10
  • Bkkbrad  · 技术社区  · 14 年前

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

    1 Dolor sit amet, consectetur adipiscing elit. Phasellus bibendum lobortis lectus
    2 quis porta. Aenean vestibulum magna vel purus laoreet at molestie massa
    3 suscipit. Vestibulum vestibulum, mauris nec convallis ultrices, tellus sapien
    4 ullamcorper elit, dignissim consectetur justo tellus et nunc. 

    结果:

    1 Lorum ipsum dolor sit amet, consectetur adipiscing elit. Phasellus bibendum
    2 lobortis lectus quis porta. Aenean vestibulum magna vel purus laoreet at
    3 molestie massa suscipit. Vestibulum vestibulum, mauris nec convallis ultrices,
    4 tellus 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 vestibulum magna vel purus laoreet at molestie massa suscipit.
    4 Vestibulum vestibulum, mauris nec convallis ultrices, tellus sapien ullamcorper elit, dignissim consectetur justo tellus et nunc.

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

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

    4 回复  |  直到 6 年前
        1
  •  16
  •   Benjamin Bannier    14 年前

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

        2
  •  1
  •   Zhaojun    14 年前

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

    1. 首先,将“set wrap”放在.vimrc中以启用“wrap”功能;

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

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

    希望有帮助。-)

        3
  •  0
  •   sigvaldm    6 年前

    我一直在想这样的事情,最后我不得不尝试一些不同的方法来看看什么有效。有一件事我绝对不满意,那就是艰难的休息 set textwidth=80 ,原因如下:

    • 每当我返回编辑上一个文本时,硬换行符将位于错误的位置。它将超过我的80个字符的限制,或者它将离我的80个字符的限制太远。当然,我可以通过使用 gq 操作员(例如) gqip , gqap ,视觉模式,然后 GQ 但是这很无聊,我经常错过我的目标区域 GQ . 这对我来说是最不利的,有困难的时候。(如果你使用 GQ 修复您可能要使用的段落 set nojoinspace 为了避免在每段时间后出现烦人的双空格。)
    • 我经常让vim和pdf并排打开。每当我想在PDF中的某个特定位置编辑某些内容时,我只需搜索文本的片段。你会惊讶于在一篇文章中,你很少用两个相当普通的词按特定的顺序排列,所以这真的非常有效。除非你在你要寻找的词之间的句子中间有困难的停顿。当使用硬断纸时,这会频繁地延迟我的工作流程。
    • 我经常用 f , F , t T . 这只适用于同一行。
    • 还有OP提到的问题,Git不能很好地处理硬断的段落。当然,你也可以让diff看起来不错,所以这不是什么大问题。

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

    此外,如果每行使用一个段落,则应获得与硬断字符大致相同的“外观”(硬断字符与 GQ ,您可以使用 ( ) . 每行一句话,你会得到一个更不规则的右边缘,但是Git和Vim的优势在于每行有一句话。试试看你喜欢什么(我自己还没决定)。

        4
  •  -1
  •   Xin Guo    12 年前

    这就是我解决问题的方法。首先,您可以使用vim命令(在正常状态下)在tex文件中搜索长度超过80个字符的行:

    /\%81v.\+/
    

    您可以将其定义为宏,以便不记住命令。然后输入正常状态

    nF a
    

    (也就是说,有一点“n”,大写“f”,一个空格,一点“a”,一个“enter”和一个)。这有助于你在说句话后轻轻地打断你的台词。您可以将这五个按键作为宏进行记录(如何:在正常状态下,按“q a”开始记录,只需执行步骤“nf a”,然后按Esc和“q”停止。播放时,请按“@A”,因为我们已将宏存储到“A”中。在正常状态下按“100@A”,100次播放宏(如果播放次数太多,不会造成伤害,只会在完成所有作业时自动停止)

    这能解决你的问题吗?