有没有一款文本编辑器可以自动确定是使用空格还是制表符进行缩进?

5
很容易设置文本编辑器使用空格或制表符作为每次按下tab键的间隔。然而,我正在处理由公司内大量开发人员维护的一些Python代码,有些人使用空格,有些人使用制表符。我不能简单地让他们全部遵循相同的规范,因为1)这会破坏git blame,2)这会混淆git diff,3)这必然会在另一个编辑器在文件中按下tab键时打破构建。
相反,我想要一个文本编辑器,它可以自动确定文件是由空格还是制表符缩进,然后符合现有的布局。有人知道是否存在这样的工具吗?

4
认真考虑制定一项公司范围内的标准(只使用空格)。否则,你会为自己制造麻烦。比如代码无法运行,很难排除问题,因为某个随机的 IF 块突然不再缩进... 但看起来在视觉和解析器上都是正确的。 - Joe Koberg
我非常同意你的观点,这也是我正在追求的。只是在此期间我需要一个解决方法。 - Cory Petosky
1
我从未学过Python,但我认为这将是一个巨大的问题。Haskell与Python共享有意义的空格的概念,如果您的代码中有制表符,它的编译器会像搁浅的鲸鱼一样挣扎。 - rtperson
Python可以正确处理使用空格或制表符的文件,但是不能处理同时使用空格和制表符的文件(这是完全可以理解的)。 - Cory Petosky
Python(至少2.x版本)可以管理混合空格和制表符;制表符被解释为“标准”的“移动到下一个8列”。如果您的编辑器设置为使用8列制表符,则不会注意到任何差异,您的代码仍将正常工作。但是,如果您有4列制表符并且文件在您的眼中看起来很好,那么对于Python来说它可能不会看起来很好。 - tzot
Python可以处理它,只要每个人的编辑器和所有Python运行时都同意tab = 8个空格(或4个或其他)。然而,这从来不是事实。许多编辑器每4个空格带有制表符。Python运行时默认为8,因此已经存在“陷阱”。 - Joe Koberg
6个回答

6

查看 --> 缩进 --> 从缓冲区猜测设置 - Michael Hackner
这是我在Windows中用过的最好的文本编辑器。感谢您的建议! - Cory Petosky
很高兴能为您翻译...我最近通过Lifehacker发现了这个程序。http://lifehacker.com/5383161/sublime-text-is-a-serious-text-editor-with-no-bloat - Michael Hackner

1

它确实有这个选项:http://www.geany.org/manual/current/index.html#indentation 谢谢。我一直在寻找一个适合我的Linux系统的好文本编辑器。 - rtperson
1
很好,现在我们为每个平台都有一个编辑器。 :) - Georg Schölly
它还有一个Windows安装程序:http://www.geany.org/Download/Releases - rtperson

1

0

你可以在vim中完成这个操作。codeblog的这个函数展示了如何检测文件的普遍格式,并设置默认值以匹配:

function Kees_settabs()
    if len(filter(getbufline(winbufnr(0), 1, "$"), 'v:val =~ "^\\t"')) > len(filter(getbufline(winbufnr(0), 1, "$"), 'v:val =~ "^ "'))
        set noet ts=8 sw=8
    endif
endfunction
autocmd BufReadPost * call Kees_settabs()

就我个人而言,我会拿着一根两乘四的木板,给使用制表符的开发人员几个敲打。


0

Mac上的TextMate可以做到这一点。

我确信vim和emacs都有相应的脚本可以实现这个功能。


这在最新的两个版本中仍然有效吗?如果是,怎么做? - kainjow
很不幸,我不知道。我写下这个答案已经有7年了,快速的谷歌搜索给我展示了一些结果,甚至可能表明我的答案是错误的,即TextMate并不会自动检测软制表符。 - Georg Schölly
1
我已经联系了TextMate支持团队,根据目前的2版本不可能实现。 - kainjow

0

vim可以做你想要的任何事情。vim几乎可以做任何事情。

这里有一个很棒的定制vim用于Python的配方:http://henry.precheur.org/2008/4/18/Indenting_Python_with_VIM.html

编辑:实际上,我刚刚尝试了一下,这里有一个简单的方法。将这两行添加到您的vim设置文件中:

filetype on
autocmd FileType python set smarttab expandtab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接