我正在尝试使用vim autowrap功能在我输入时自动将我的段落包装成不超过80个字母的行。这可以通过set textwidth=80
和set fo+=a
来完成。 vim a
或formatoptions
的{{1}}选项基本上告诉vim在输入时包装整个段落。
然而,有一个非常令人烦恼的副作用,我只能按回车就不能打破一条线。
这是一个例句。
如果我想进入上述句子,请说:
这是
一个例句。
通常我只需将光标移动到" a"并进入插入模式,然后按Enter键。但是在fo
之后,当我在" a"中按下插入模式时,不会发生任何事情。我注意到的一件事是,如果&#34之间没有空间,那么"和" a",按Enter键将插入一个空格。但在此之后别无其他事情发生。
那我在这里想念什么?如何阻止这种令人讨厌的行为?
答案 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) {
// ...
}
}