代码之家  ›  专栏  ›  技术社区  ›  huangzonghao

如何正确使用vim autowrap?

  •  1
  • huangzonghao  · 技术社区  · 6 年前

    我正在尝试使用vim自动换行功能,在我键入时,自动将我的段落实时换行成不超过80个字母的行。这可以通过以下方式完成 set textwidth=80 set fo+=a . 这个 a vim选项 formatoptions fo 基本上告诉vim在键入时包装整个段落。

    然而,有一个非常恼人的副作用,那就是我再也不能通过简单地按enter键来打断一条线了。

    这是一个例句。

    如果我想把上面的句子变成:

    这是

    例句。

    通常我可以将光标移动到“a”并进入插入模式,然后按enter键。但之后 设置fo+=a ,当我在插入模式下按enter键时,将不会发生任何事情。我注意到的一件事是,如果“is”和“a”之间没有空格,按enter键将插入一个空格。但之后不会再有其他事情发生。

    那么我错过了什么呢?我该如何阻止这种恼人的行为?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Reece Stevens    6 年前

    你可以跑步 :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 . 这应该可以解决你的问题。

    编辑 :一旦有 设置文本宽度=80 ,如果要设置现有段落的格式,可以在视觉选择中突出显示该段落,然后按 gq .

        2
  •  1
  •   Oppy    6 年前

    以下内容允许我在将文本宽度设置为79个字符时,使用enter键开始新行:

    set tw=79 "width of document                                                                            
    set fo=cqt                                                                      
    set wm=0 "# margin from right window border
    
        3
  •  0
  •   huangzonghao    6 年前

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

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

    我认为这个不是最优的原因是由于某种原因我无法绑定 <Enter> 这样,但必须使用另一个键。

    如果 <输入(>); <CR> 可以通过这种方式进行配置,那么问题就完全解决了。