2011-12-14 51 views
2

我正在尝试学习vim :-)有一些真正的麻烦与自动缩进改变我的Python代码的含义。有没有办法获得autoindent的好处,而不会遇到像下面那样的行为?Vim Python缩进更改代码语义

我开始一个python的文件:

 
[email protected]:/tmp$ cat pytest.py 
if False: 
    print('Never', 
      'print this line') 

print 'Always print this line.' 

自动缩进与vim pytest.pygg=G:wq

D'哦,我搞砸了我的脚本:

 
[email protected]:/tmp$ cat pytest.py 
if False: 
    print('Never', 
      'print this line') 

    print 'Always print this line.' 

试图保持这真的是香草:

 
[email protected]:/tmp$ cat ~/.vimrc 
filetype plugin on 
filetype indent on 
autocmd FileType python set sw=4 
autocmd FileType python set ts=4 
autocmd FileType python set sts=4 
autocmd FileType python set textwidth=79 
+2

这就是为什么我从不使用自动压缩器的原因,即使在使用缩进不重要的语言编写时也是如此。我建议在编写代码时保持清洁,避免任何类型的自动操作。 – redShadow 2011-12-14 02:03:55

回答

2

在vim中自动缩进工作只是让你的tabstop,shiftwidth,softtabstop和expandtab设置与你正在编辑的文件一致的问题。我使用这个插件:

http://freecode.com/projects/vindect

从您正在编辑的Python文件出来工作的这些设置,并确保Vim的行为正确,即使你碰巧编辑其他人谁提交他们的白色空间,不同的设置来自你。编辑:如果你想做一个完整的python源代码文件重置(替换gg = G),你需要一个像这样的Python特定重塑文件:http://svn.python.org/projects/doctools/trunk/utils/reindent.py你可以很容易地变成一个vim命令。

+0

这不是给自己带来麻烦的autoindent,而是重新执行命令。但这是一个方便的链接。 – MikeyB 2011-12-14 14:34:23

4

是的,不要这样做。

VIM中自动缩进的要点是让编辑器根据语言格式规则猜测空白应该去的位置。但是:

enter image description here

Python的空白是很重要的,你也知道。正如医生所说:Don't Do That Then.

+0

不够公平,@MikeyB。这几乎是我所怀疑的。 (但是有足够的软件包,教程等,我认为可能最先进的技术水平......) – Bosh 2011-12-14 02:25:50