所以这是我的问题。假设我有一个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服从我的破坏设置,或任何其他关于处理这种行为的最佳方法的想法?
答案 0 :(得分:3)
您没有设置换行符。没有它,vim会忽略breakat变量。有关详细信息,请参阅here,以及许多vim优点。另请注意,您需要设置nolist,因为它会破坏换行符。
另一篇关于自动换行的博文here。这个注意到一些文件类型不会自动包含格式选项“t”标志。没有它,就不会发生自动换行。
我认为最简单的方法是添加一个映射来运行:%! pythonTidy
。 pythonTidy是python中的一个脚本,用于在stdIn上获取python代码并将一个漂亮的版本输出到stdOut。使用该映射,它将允许您在当前文件上运行它,并用重新格式化的版本替换整个内容。每当你在python文件中退出插入模式时,添加一个自动命令来运行它,你应该设置它。