如何在vim中使文本换行匹配当前缩进级别?

13

有没有办法让vim自动换行,使得换行后的文本位置基于当前行的缩进?我不想重新格式化我的代码,只是希望它能够显示得漂亮。

例如,如果我将设置如下:

print 'ProcessorError(%r, %r, %r)' % (self.file, self.index, self.message)

当作为以下方式包装时显示:

print 'ProcessorError(%r, %r, %r)' % (self.file, self.index,
    self.message)

那么,如果我编写以下代码块:

    def __repr__(self):
        return 'ProcessorError(%r, %r, %r)' % (self.file, self.index, self.message)

它会被包装成类似这样的东西:

    def __repr__(self):
        return 'ProcessorError(%r, %r, %r)' % (self.file, self.index,
    self.message)

我希望它显示为:

    def __repr__(self):
        return 'ProcessorError(%r, %r, %r)' % (self.file, self.index,
            self.message)

编辑:阅读了Don Werve的回答后,似乎我确实在寻找breakindent选项,但该选项仍然在“等待更新的补丁”列表中(请参见Vim TODO)。所以我想知道最简单的方法是什么,可以使vim与breakindent一起工作?(我不关心我必须使用哪个版本的vim。)


这个回答解决了你的问题吗?Vim中的智能换行 - robertspierre
5个回答

7

我在SuperUser上提出了同样的问题,最终找到了这个问题,找到了补丁,并更新了补丁以使其与来自Fedora 11的Vim 7.2.148兼容。

您可以使用yumdownloader --source vim获取源RPM。然后在规范文件中添加Patch3312:行和%patch3012 -p1行,然后构建RPM。


随着 Fedora 发布 vim 的更新,我正在更新补丁。请查看 https://retracile.net/wiki/VimBreakIndent 获取最新信息。 - retracile
感谢你维护这个补丁。我已经成功地在Ubuntu上应用了7.3版本。 - JaseAnderson
我已经尝试下载这个补丁,但是找不到它的链接。我在哪里可以找到它?这可能是我现在最想要的东西。 - puk
1
一个重要的软件升级导致了一些链接失效。我已经修复了它们。 - retracile

4

您正在寻找 breakindent

您可能还想参考这个帖子


1
有关breakindent补丁的最新更新,请参见此处:https://retracile.net/wiki/VimBreakIndent - talljosh

1

这确实是一个有用的脚本,但它似乎并没有做我实际要求的事情。我需要的是一些能够帮助长行的可视位置而不是自动缩进位置的东西。 - talljosh
该脚本还会添加换行符并正确缩进长行,使它们成为不超过80个字符的漂亮格式化行。 - Brian Dorsey

0

关于控制Python代码缩进,请参见:h ft-python-indent。例如,如果您在未关闭的括号处换行,则会使Vim将shiftwidth缩进两次:

let g:pyindent_open_paren = '&sw * 2'

然而&sw * 2是默认设置,不确定为什么对你不起作用。我使用手动换行或使用textwidth引起的换行都可以工作。

上述设置需要在.vimrc中或在Vim进入Python模式之前进行设置。确保执行:setf python或以其他方式进入Python模式。


-2

我认为设置textwidth = 80就可以了。


实际上这并不是问题所在 - 重点是当Vim需要换行以适应查看窗口时,它如何显示代码。 - talljosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接