36

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

这是为什么?

4

5 回答 5

58

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

于 2012-09-17T20:47:38.090 回答
33

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

未格式化:

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. 同样,您仍然会丢失一些信息 - 格式化之前的换行符处的多个空格最终会折叠为单个空格。(您实际上可以通过使用而不修改空格来加入gJJ但格式化时您已经丢失了它们)

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

于 2009-10-16T16:04:33.550 回答
10

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

:j!

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

见::help :join

于 2015-05-29T22:10:55.110 回答
6

是最终对我有用的答案,以上都不适用于我的用例。

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

于 2013-03-20T19:20:10.913 回答
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为了执行加入而没有任何额外的空间!

于 2015-07-08T18:34:49.260 回答