如何修复Vim在Python中对长行的行分行为?

所以这是我的问题。 假设我有一个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一起工作来确定插入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设置,或者有关处理这种行为的最佳方式的任何其他想法?


你没有设置换行符。 没有它,vim会忽略breakat变量。 有关详细信息,请参阅此处以及许多VIM善良。 另外请注意,您需要设置nolist,因为它会打断linebreak。

另一篇博客文章涉及这里的文字包装。 这一个注意到一些文件类型不会自动包含格式选项“t”标志。 没有它,自动包装不会发生。

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

链接地址: http://www.djcxy.com/p/9555.html

上一篇: How can I fix Vim's line breaking behavior for long lines in Python?

下一篇: Mocking up Apache session data for unit testing