为什么Vim在连接线时会添加空格?

问题描述 投票:33回答:5

我想在Vim中打开文本。当我加入线条时,我会在句子之间获得额外的空格。

这是为什么?

vim text-formatting
5个回答
30
投票

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

未格式化的:

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


54
投票

我有一种感觉,这就是你真正想要的: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。


6
投票

This是最终为我工作的答案,上述工作都没有在我的用例中起作用。

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


5
投票

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

:j!

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

见::help :join


1
投票

如果我们工作的线不以空格结束,我在加入后仍然会得到额外的一个空格。通常这是期望的行为。例

first line without space
second line

加入J后,成为

first line without space second line

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

myInstance->methodA()
          ->methodB()

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

这里是我使用的帮助器映射

nmap <leader>jj Jx

<leader>键可以用:let mapleader检查,默认为密钥\我相信。

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

© www.soinside.com 2019 - 2024. All rights reserved.