【发布时间】:2010-12-07 10:17:38
【问题描述】:
我想在 Vim 中展开文本。当我加入行时,我会在句子之间增加一个空格。
这是为什么呢?
【问题讨论】:
标签: vim text-formatting
我想在 Vim 中展开文本。当我加入行时,我会在句子之间增加一个空格。
这是为什么呢?
【问题讨论】:
标签: vim text-formatting
我感觉这就是你真正想要的: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。
【讨论】:
格式化会破坏信息。有许多不同的文本块,一旦格式化就会产生相同的文本块。因此,没有先验知识(即撤消)就无法撤消操作。
未格式化:
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 命令一次应用于多行,或者结合ap 或ip 来选择一个段落,例如vipJ。同样,您仍然会丢失一些信息 - 格式化之前的换行符处的多个空格最终会折叠为单个空格。 (实际上,您可以使用gJ 而不是J 来加入而无需修改空格,但格式化时您已经丢失了它们)
如果您对句子后多余的空格(以 !、? 或 . 结尾的行)感到困扰,请关闭连接空格:set nojoinspaces
【讨论】:
:set nojoinspaces
:help J) 下方的描述中发现了这一点。 Vim 的内部文档通常都很好,特别是如果你有一个像 J 这样的起点。
:set nojoinspaces,我仍然在每一行的末尾得到一个空格。是否是“额外”空格是有争议的——为了捍卫 Vim 的无可争议的神,vi 可能只是用空格替换换行符,所以从技术上讲,那个空格“不算数”。如果您真的不希望连接线之间有空格,请尝试下面@Chris(不是我 :-) 指出的 ggVGgJ。
我猜想加入没有空格的行的简单解决方案是:
:j!
对于!,连接不会插入或删除任何空格。对于整个文件,使用:%j!。
请参阅::help :join。
【讨论】:
This 是最终为我工作的答案,以上都不适用于我的用例。
基本上,像其他人所说的那样使用 gJ,但突出显示所有文件,所以在命令模式下键入 ggVGgJ。
【讨论】:
如果我们处理的行没有以空格结尾,我在加入后仍然得到额外的一个空格。通常这是期望的行为。示例
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 执行连接,无需任何额外空间!
【讨论】: