启用自动换行后,我可以编写一些文本,如
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"
是否有插件或选项可以添加用于包装某些行的特殊规则,以便可以以上下文感知的方式添加相关字符?
#1 楼
您可以使用自定义格式的表达式/程序来实现所需的功能。请查看:help 'formatexpr'
和:help 'formatprg'
,以获取有关确切操作方法的信息。仅当文本应该换行时。此问题已在Vim 7.4.658中修复。
评论
从理论上讲,“ formatexpr”听起来像您想要看的东西。但是,当我在本地使用它时,它却无法正常工作。它不会在超过textwidth时调用我的函数,而是针对每个非空白字符键入它。这仍然可以工作,但对性能的影响很大。@MattBoehm我认为您正在遇到:“当设置'textwidth'并添加超出该限制的文本时,也会对表达式进行求值” ... formatexpr似乎是解决我的方法!
@Carpetsmoker对我而言,如果'textwidth'为40,并且我开始在新行中键入,则将对每个非空格键击(包括键入的第一个字母)都评估该表达式。这可能是由于我的某些错误。如果formatexpr像您/问询者所记录的那样工作,那肯定看起来像是解决方案。
@MattBoehm您正在描述正确看到的内容。我也像您一样对文档进行了解释,因此我提交了一个补丁,使Vim像应有的表现那样运行。
@MattBoehm该补丁在7.4.658上游应用。 :)