9

所以这是我的问题。假设我有一个 Python 文件,我正在输入很长的一行,就像这里的最后一行:

class SomeClass(object):
  def some_method(self):
    some_variable = SomeOtherClass.some_other_method(some_parameter=some_value)

当我在 Vim 中键入时,会发生这种情况:

class SomeClass(object):
  def some_method(self):
    some_variable =
    SomeOtherClass.some_other_method(some_parameter=some_value)

这不仅仅是糟糕的风格,它破坏了 PEP8。我想要发生的是:

class SomeClass(object):
  def some_method(self):
    some_variable = SomeOtherClass.some_other_method(
        some_parameter=some_value)

这与PEP8 一致。(出于本次讨论的目的,我只对换行行为感兴趣,而不是缩进行为。)

编辑: breakat仅与linebreak控制线条的显示方式结合使用。它(显然)不能与textwidth确定硬换行符的插入位置一起工作。所以我下面的想法行不通......

令人惊讶的是,我没有发现任何其他人分享这个问题,这让我认为我做错了什么。尽管如此,我的想法是将(角色添加到breakat设置中(以及[{我在它时)。

我试过这个;这是输出:set breakat

breakat= ^I!@*-+;:,./?([{

然而,这无济于事。无论我做什么,Vim 都坚持在上面的“=”之后打破。我对长函数名也有同样的问题,它会在def.

以下是我的 .vimrc 的完整内容:

set nobackup
set nowritebackup
set noswapfile
set columns=80
set tabstop=4
set shiftwidth=4
set softtabstop=4
set autoindent
set smarttab
set smartindent
set textwidth=80
set wrap
set breakat=\ ^I!@*-+;:,./?\(\[\{
filetype indent on
filetype on
filetype plugin on

(我没有安装插件等来试图解决这个问题。)

有谁知道如何让 Vim 遵守我的 breakat 设置,或者对处理这种行为的最佳方法有任何其他想法?

4

1 回答 1

3

你没有设置换行符。没有它,vim 会忽略 breakat 变量。有关详细信息,请参见此处,以及许多 vim 优点。另请注意,您需要设置 nolist ,因为它会中断换行符。

另一个处理自动换行的博客文章。这一点指出,某些文件类型不会自动包含格式选项“t”标志。没有它,不会发生自动换行。

我认为最简单的做法是添加一个映射来运行:%! pythonTidypythonTidy是 python 中的一个脚本,用于在 stdIn 上获取 python 代码并将漂亮的版本输出到 stdOut。使用该映射,它将允许您在当前文件上运行它,并将整个内容替换为重新格式化的版本。添加一个自动命令以在您退出 python 文件中的插入模式时运行它,并且您应该进行设置。

于 2011-10-05T13:34:42.740 回答