启用自动换行后,我可以编写一些文本,如

This line is starting to get fairly long so
it has been wrapped


如果我开始写评论,我会得到相当明智的行为:

# When I reach the maximum line width in a
# comment, the next line gets commented
# too!


但是,如果我正在编写一些Ruby,并且我位于缩进行的字符串中间...

str = "If I'm trying to write a ruby string, 
       and then it tries to wrap, I get a 
       surprise newline and a bunch of space!"


虽然这是有效的Ruby代码,但是更好的编写方法如下:

str = "Really, what I'd like it to do is "\
      "notice that I'm in the middle of a "\
      "string and sort it out for me"


是否有插件或选项可以添加用于包装某些行的特殊规则,以便可以以上下文感知的方式添加相关字符?

评论

从理论上讲,“ formatexpr”听起来像您想要看的东西。但是,当我在本地使用它时,它却无法正常工作。它不会在超过textwidth时调用我的函数,而是针对每个非空白字符键入它。这仍然可以工作,但对性能的影响很大。

@MattBoehm我认为您正在遇到:“当设置'textwidth'并添加超出该限制的文本时,也会对表达式进行求值” ... formatexpr似乎是解决我的方法!

@Carpetsmoker对我而言,如果'textwidth'为40,并且我开始在新行中键入,则将对每个非空格键击(包括键入的第一个字母)都评估该表达式。这可能是由于我的某些错误。如果formatexpr像您/问询者所记录的那样工作,那肯定看起来像是解决方案。

@MattBoehm您正在描述正确看到的内容。我也像您一样对文档进行了解释,因此我提交了一个补丁,使Vim像应有的表现那样运行。

@MattBoehm该补丁在7.4.658上游应用。 :)

#1 楼

您可以使用自定义格式的表达式/程序来实现所需的功能。请查看:help 'formatexpr':help 'formatprg',以获取有关确切操作方法的信息。仅当文本应该换行时。此问题已在Vim 7.4.658中修复。