如何正确使用vim autowrap?

时间:2018-02-14 22:48:22

标签: linux vim editor text-editor

我正在尝试使用vim autowrap功能在我输入时自动将我的段落包装成不超过80个字母的行。这可以通过set textwidth=80set fo+=a来完成。 vim aformatoptions的{​​{1}}选项基本上告诉vim在输入时包装整个段落。

然而,有一个非常令人烦恼的副作用,我只能按回车就不能打破一条线。

  

这是一个例句。

如果我想进入上述句子,请说:

  

这是

     

一个例句。

通常我只需将光标移动到" a"并进入插入模式,然后按Enter键。但是在fo之后,当我在" a"中按下插入模式时,不会发生任何事情。我注意到的一件事是,如果&#34之间没有空间,那么"和" a",按Enter键将插入一个空格。但在此之后别无其他事情发生。

那我在这里想念什么?如何阻止这种令人讨厌的行为?

3 个答案:

答案 0 :(得分:2)

您可以运行:help fo-table查看选项说明:

a   Automatic formatting of paragraphs.  Every time text is inserted or
    deleted the paragraph will be reformatted.  See |auto-format|.
    When the 'c' flag is present this only happens for recognized
    comments.

这意味着每次插入一个字符时,vim都会尝试自动格式化该段落。这将导致它将所有内容移回同一行。

我认为您根本不需要添加a。我使用neovim,但这里的行为应该是一样的。根据帮助页面,默认值为:

(default: "tcqj", Vi default: "vt")

尝试从set fo+=a完全删除.vimrc。保持set textwidth=80。这应该可以解决你的问题。

编辑:获得set textwidth=80后,如果要格式化现有段落,可以在视觉选择中突出显示该段落,然后按gq

答案 1 :(得分:0)

经过一番探索,我找到了一种可以在一定程度上解决问题的解决方法,虽然并不完美。

基本思路是,在输入换行符时,在发送<CR>时暂时禁用自动换行并在此之后恢复自动换行。有多种方法可以做到这一点。据我所知,最好的是使用粘贴模式,因为在进入粘贴模式时你不必退出插入模式。因此,只需将以下命令放入插入模式中您喜欢的任何键绑定中。我现在使用的是inoremap <C-N> <F2><CR><F2>

我认为这个不是最优的原因是由于某些原因我不能以这种方式绑定<Enter>,但必须使用另一个键。

如果可以通过这种方式配置<Enter><CR>,那么问题就会100%解决。

答案 2 :(得分:0)

以下允许我使用回车键开始换行,同时将文字宽度设置为79个字符:

abstract class A<T extends A.B> {
    class B {
      // ...
    }

    abstract void func(T param) {
      //..
    }
}

class Asub<Asub.B> extends A {
    class B extends A.B {
      // ...
    }


    @Override
    void func(Asub.B param) {
      // ...
    }
}