在Vim包裹长行?

问题描述 投票:3回答:2

我注意到当我粘贴一条长行时gq不起作用。例如,使用textwidth=72formatoptions=tcroqbnl,gq拒绝包装它(在插入模式下,我粘贴整个标签内容,然后使用ESC退出插入模式):

<label for="contact_reason_1">To get assistance with or to confirm a tire replacement recommendation</label>

如果我在(在“to”之后)添加换行符,那么它将换行。有趣的是,如果我一起加入这条线,它会很高兴再次包裹它。所以VIM似乎在某种程度上记得“哦,这是一个粘贴,不要包装它”。

如何关闭该功能?我希望gq在命令模式下始终有效。从l中取出formatoptions似乎没有帮助(它不应该,这不是插入模式)。


clarification

是的,我正在使用动作命令,特别是gq <Right>。 formatexprformatprog都没有设置。如果重要的话,这是在Debian GNU / Linux,vim版本7.2p284上的gvim中。

steps to reproduce

  1. 在打开的文件上弹出gvim。
  2. 按i进入插入模式,然后键入This is a long line. A long line. But not wrappable yet. Or yet. Soon.
  3. 按ESC,然后按I.键入Now putting text in front of the long line.注意:在最后一段时间后有一个空格,无法显示SO,除非此注释在此处。 FUN。
  4. 按ESC,然后A.键入And some after.注意:在And之前的空格,同样的SO问题。
  5. 最后一次按ESC。现在尝试gq <Left>,注意它只包装And some after.;我不能让vim包装剩余的行(没有进入插入模式并手动执行换行,然后它工作)。

修复这种状态是可行的;在“now”之后添加换行符然后点击撤消会使换行再次运行。 WTF。

vim paste word-wrap
2个回答
7
投票

gq不足以包装文本。你必须给它一个动作来包装(如gqj)或告诉它用gqq包装当前行。你确定你不只是错误的吗?

如果你不是,那么formatexprformatprg的选项是什么?

更新 问题是formatoptions中的b设置。这告诉Vim只包装上次插入时添加的文本。


1
投票

我发现如果我在做gq之前选择该行,它可以正常工作。 gq是否希望与某些文本选择操作相结合才能工作?

UPDATE

我确认了这个错误。运行vim -u NONE,我的formatoptionsvt

也许Bram Molenar或至少vim社区会感兴趣?

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