【问题标题】:Is there any way to get vim to auto wrap python strings at 79 chars?有没有办法让 vim 以 79 个字符自动包装 python 字符串?
【发布时间】:2024-01-21 18:33:01
【问题描述】:

我发现这个answer 关于使用括号包裹字符串非常有用,但是在 Vim 中有没有办法让这自动发生?我想在一个字符串中打字,然后让 Vim 在我的字符串周围加上括号并在必要时将其包裹起来。对我来说,这将是一个 巨大的 时间节省,因为我花了很多时间手动包装长字符串。提前致谢。

例子:

  1. 我输入以下文本:

    mylongervarname = "my really long string here so please wrap and quote
    automatically"
    
  2. 当我用字符串点击第 80 列时,Vim 会自动执行此操作:

    mylongervarname = ("my really long string here so please wrap and "
                       "quote automatically")
    

【问题讨论】:

  • 如果这是在文档字符串中,你总是可以使用 vim 的 gq 来包装文本。如果它是内联的..为什么你有这么长的内联文本?
  • 它只是在需要添加成员的 help_text 之类的内容时发生。它不会经常发生,但当它发生时,我会非常痛苦,我正在寻找任何方法来避免它。
  • 此外,由于默认选项卡设置,它会发生很多,其中字符串将自动缩进到长行的末尾。例如。 self.fields['description'].help_text = "这里有些文字已经很远了。"
  • 很高兴你喜欢我的回答。我不知道这个问题的答案,但我可能也会使用它。我会说,如果您有一堆长字符串,那么将它们三引号和/或将它们包含在外部文件中可能是有意义的。
  • 不完全符合您的要求,但在 .vimrc 中设置 "set textwidth=80" 对您有帮助吗?

标签: python vim string word-wrap


【解决方案1】:

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

使用'formatexpr''formatprg'。当一行超过'textwidth' 并通过'formatoptions' 设置的标准时,这些将用于(如果设置)断行。唯一真正的区别是'formatexpr' 是一个vimscript 表达式,而'formatprg' 通过外部程序过滤行。

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

【讨论】:

  • 我尝试编写一个 formatexpr,但我什至无法让它运行。我已经搜索并搜索了有关编写其中之一的示例或文档,但始终找不到任何东西。
  • 这是一个例子mail-archive.com/vim@vim.org/msg08443.html(见autofmt.zip:autofmt/autoload/autofmt/compat.vim
最近更新 更多