【问题标题】:Why does Vim add spaces when joining lines?为什么 Vim 在连接行时要添加空格?
【发布时间】:2010-12-07 10:17:38
【问题描述】:

我想在 Vim 中展开文本。当我加入行时,我会在句子之间增加一个空格。

这是为什么呢?

【问题讨论】:

    标签: vim text-formatting


    【解决方案1】:

    我感觉这就是你真正想要的:gJ

    来自:h gJ

    gJ          Join [count] lines, with a minimum of two lines.
                Don't insert or remove any spaces.  {not in Vi}
    

    如果您从终端复制了一些内容并将其作为一个大矩形块而不是单行粘贴到 vim 中,这将很方便。

    我通常在可视模式下使用它。突出显示内容,gJ

    【讨论】:

    • 这是正确答案。接受的答案对我不起作用。
    • 相同。 nojoinspaces 没有任何效果。我不得不宏 Jx 来删除每个空格。
    【解决方案2】:

    格式化会破坏信息。有许多不同的文本块,一旦格式化就会产生相同的文本块。因此,没有先验知识(即撤消)就无法撤消操作。

    未格式化:

    Unformatted text could start out as either all one line, or several, yet look the same when formatted.
    
    Unformatted text could start out as either all one line, or several, 
    yet look the same when formatted.
    

    格式化:

    Unformatted text could start out as 
    either all one line, or several, 
    yet look the same when formatted.
    

    如果你希望你的段落都在一行上,或者如果你对一些手动的摆弄没问题,你可以使用J 将行重新连接在一起。您可以使用可视模式将J 命令一次应用于多行,或者结合apip 来选择一个段落,例如vipJ。同样,您仍然会丢失一些信息 - 格式化之前的换行符处的多个空格最终会折叠为单个空格。 (实际上,您可以使用gJ 而不是J 来加入而无需修改空格,但格式化时您已经丢失了它们)

    如果您对句子后多余的空格(以 !、? 或 . 结尾的行)感到困扰,请关闭连接空格:set nojoinspaces

    【讨论】:

    • 非常感谢。我已经尝试过加入行,但让我烦恼的是,加入行后句子之间突然出现多个空格。
    • 那么您的问题的答案就是取消设置连接空间::set nojoinspaces
    • 非常肯定,谢谢!我对句子后面的这2个空格不熟悉。
    • 我在连接命令列表 (:help J) 下方的描述中发现了这一点。 Vim 的内部文档通常都很好,特别是如果你有一个像 J 这样的起点。
    • 使用:set nojoinspaces,我仍然在每一行的末尾得到一个空格。是否是“额外”空格是有争议的——为了捍卫 Vim 的无可争议的神,vi 可能只是用空格替换换行符,所以从技术上讲,那个空格“不算数”。如果您真的不希望连接线之间有空格,请尝试下面@Chris(不是我 :-) 指出的 ggVGgJ。
    【解决方案3】:

    我猜想加入没有空格的行的简单解决方案是:

    :j!
    

    对于!,连接不会插入或删除任何空格。对于整个文件,使用:%j!

    请参阅::help :join

    【讨论】:

      【解决方案4】:

      This 是最终为我工作的答案,以上都不适用于我的用例。

      基本上,像其他人所说的那样使用 gJ,但突出显示所有文件,所以在命令模式下键入 ggVGgJ

      【讨论】:

        【解决方案5】:

        如果我们处理的行没有以空格结尾,我在加入后仍然得到额外的一个空格。通常这是期望的行为。示例

        first line without space
        second line
        

        加入J后,成为

        first line without space second line
        

        虽然在某些情况下,我们不希望应用它,

        myInstance->methodA()
                  ->methodB()
        

        我们希望连接变为myInstance->methodA()->methodB(),中间没有任何空格!

        这里是我使用的助手映射

        nmap <leader>jj Jx
        

        键可以用:let mapleader 检查,我相信默认为键\

        所以在正常模式下,只需\jj 执行连接,无需任何额外空间!

        【讨论】:

          猜你喜欢
          • 2012-12-19
          • 2020-05-27
          • 2014-02-16
          • 2012-11-09
          • 1970-01-01
          • 1970-01-01
          • 2012-09-21
          • 2020-01-17
          • 2012-04-26
          相关资源
          最近更新 更多