2011-12-05 42 views
4

比方说,我有以下Python代码:有没有办法在vim中使==工作以重新获得Python代码?

if conditionOne(): 
    if conditionTwo(): 
     foo = bar 
     foo += 1 
     bar -= 2 

如果我以后删除conditionTwo,我想迪登三线块的,所以它看起来与我的所有其他的代码是一致的。通常情况下,我只能达到=%(我的主要语言是C++),但这不会在这里工作,所以我在该块的第一行尝试3==。导致这样的:

if conditionOne(): 
    foo = bar 
     foo += 1 
     bar -= 2 

这不是我所期待的。我本来可以用3<<去得到更好的结果,但这不是我通常使用的命令。我宁愿不必记住专门用于Python的缩进命令。本着Don't Make Me Think的精神,是否有办法使=过滤器像我期望的那样用Python代码工作?

+0

可能重复的[.vimrc配置为Python](http://stackoverflow.com/questions/1523482/vimrc-configuration-for-python) – sehe

+1

@sehe,我不认为这是这个问题的重复,除非有一些设置埋在那里,这将解决我的问题。对于Vim 7附带的股票Python缩进,我感到非常满意。 –

+0

对于我的误解,您对对不起。没办法删除我的投票恐怕。我会看看我是否可以在 – sehe

回答

3

尽管在C或C++中缩进程序不会影响其行为,但在Python中它确实可以,因为缩进是流控制的一部分。

因此,在Python中,具有不同缩进的程序将具有不同的行为,对于编辑器而言,不可能猜测开发人员是否想要缩进行(在内部作用域中)。

因此,编辑器的自动缩进功能旨在用于C语言,而不是Python。

+0

获得版主。但在这种情况下,我认为不应该无法正确猜测。我们知道两件事:(1)我把这三条线缩在一起,所以它们应该保持在一起。 (2)从if语句中将第一行移入一个shiftwidth是足够聪明的。鉴于这两个,我想我想要的(所有三行缩进一个shiftwidth)应该是可能的,我只是不知道如何。 –

+0

这是完全正确的。 @Kristo(1)没有可能。要么是或者不是。 Vim无法猜测你想要做什么。想想相反的情况:你添加了一个if。现在,随后的线是否是身体的一部分? (2)那是因为在if语句之后,可能是它的主体,默认缩进。 – sidyll

+1

Vim可以使用/ indent目录中的python.vim缩进文件中编码的任何规则进行猜测。我不确定,但有一条规则可能是后继线永远不会从前一行缩进多个级别,这(我认为?)是Python代码中的一个通用规则。(当然,后继线可以从前面几行中删除任意数量的层次,但这是不同的问题。) –

0

如果使用vim-indent-object插件,你可以做以下删除线和迪登块:

  • 随着光标的条件:<iidd
  • 将光标置于块的任何地方: <aidd

考虑到这一点,也许你可以:nmap =% <ii:nmap == <ai和删除,如你所愿的条件。这不是一个完美的解决方案,但它似乎是一个体面的替代品。

相关问题