有没有办法让vim自动将Python字符串换行到79个字符?

35
我发现这篇关于使用括号包装字符串的答案非常有用,但是在Vim中是否有一种自动实现的方式?我想在字符串内部打字时,Vim会自动将我的字符串括起来并根据需要进行换行。对我来说,这将是一个巨大的时间节省,因为我花费了很多时间手动换行长字符串。提前感谢。
示例:
  1. 我键入以下文本:
    mylongervarname = "my really long string here so please wrap and quote
    automatically"
    
  2. Vim在字符串达到80个字符时自动执行以下操作:
    mylongervarname = ("my really long string here so please wrap and "
                       "quote automatically")
    

如果这是在文档字符串内,您可以始终使用vim的gq来换行文本。如果是行内的...为什么您有这么多长的行内文本呢? - Eevee
只有在需要添加成员的help_text时才会出现这种情况。它并不经常发生,但当它发生时,它是如此痛苦,以至于我正在寻找任何避免它的方法。 - Vic Fryzel
此外,由于默认的选项卡设置,经常会发生这种情况,其中字符串将自动缩进到长行的末尾。例如:self.fields ['description'] .help_text =“此处有一些文本,已经非常远了。” - Vic Fryzel
很高兴你喜欢我的回答。我不知道这个问题的答案,但这也是我可能会使用的东西。我只想说,如果你有一堆长字符串,将它们三重引用或将它们放在一个外部文件中可能是有意义的。 - Kenan Banks
不完全是你所要求的,但在 .vimrc 中设置 "set textwidth=80" 对你有些帮助吗? - raf
1个回答

12

更多是一个方向而不是解决方案。

使用'formatexpr''formatprg'。当一行超过'textwidth'并且符合'formatoptions'设置的条件时,如果设置了这些选项,将使用它们来折断该行。唯一的真正区别是,'formatexpr'是一个vimscript表达式,而'formatprg'则通过外部程序过滤该行。

因此,如果您知道一个可以对Python代码行执行此转换的格式化程序,或者愿意编写这样一个程序,这将给您一个钩子来执行它。由于vim支持python(请参见:help python),因此您甚至可以用Python编写您的python格式化程序。


我尝试编写一个formatexpr,但是我甚至都无法让它运行。我已经搜索了很多关于编写这种表达式的示例或文档,但一直找到的几乎没有什么有用的信息。 - Vic Fryzel
这是一个示例:http://www.mail-archive.com/vim@vim.org/msg08443.html(请查看`autofmt.zip:autofmt/autoload/autofmt/compat.vim`) - rampion

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