如何防止空格成为 Eclipse 中的制表符(带 PyDev)

How to keep spaces from becoming tabs in Eclipse (w/ PyDev)

我在使用 Eclipse 时遇到了一个不幸的问题,该问题只发生在现有的 Python 文件中,其中某处带有选项卡。它不会发生在空文件或非 .py 文件中。

基本上,如果我尝试复制然后超过 3 spaces,我最终会得到每 X spaces 的制表符,X 是每个 space 的字符数] 编辑器的设置。在我的例子中,这是 4,所以我得到以下结果:

Copy and paste 1 space:       " "         (one space)
Copy and paste 3 spaces:      "   "       (three spaces)
Copy and paste 6 spaces:      "\t  "      (one tab, two spaces)
Copy and paste 9 spaces:      "\t\t "     (two tabs, one space)
Copy and paste 12 spaces:     "\t\t\t"    (three tabs)

对于我的生活,我无法弄清楚为什么会发生这种情况或如何将其关闭。不得不继续手动编辑我粘贴的每一行,而不是准确地获取我最初复制的内容,这真的很令人沮丧。

有谁知道这是什么设置,或者这只是一个错误?

编辑:明确地说,当我按下制表键时我不想要 spaces,当我要求制表符时我想要制表符。但是,当我想粘贴 space 时,我不想更改字符,特别是如果很明显我在单引号或双引号之间并且只是尝试按原样编写文本。

您是否尝试搜索一般编辑器首选项? :

Window > Preferences > General > Editors > Text Editors

或以下:

Window > preferences > PyDev > Editor

关于 space 和标签

应该有一些选项

如果您的文件已经包含标签,那么您可以尝试使用: Window > Preferences --> PyDev --> Editor

然后禁用 Assume tab spacing when file contain tabs

发生这种情况是因为:

org.python.pydev.editor.autoedit.AbstractIndentPrefs.convertToStd(IDocument, DocumentCommand) 它会以两种方式进行(制作空格 -> 制表符或制表符 -> 空格),因此,没有真正的选择让它保持原状是。

即:https://github.com/fabioz/Pydev/blob/development/plugins/org.python.pydev/src/org/python/pydev/editor/autoedit/AbstractIndentPrefs.java

代码:

private String convertSpacesToTabs(IDocument document, String text, int offset, String indentString)
        throws BadLocationException {
    String spaceStr = StringUtils.createSpaceString(getTabWidth());
    while (text.startsWith(spaceStr)) {
        text = text.replaceAll(spaceStr, "\t");
    }
    return text;
}

此处有 2 个可能的修复方法:

  1. 创建一个选项,以便永远不会进行任何转换。
  2. 改进 convertSpacesToTabs,使其更好地猜测缩进而不是使用制表符宽度(这样转换会做得更好)。

由于 PyDev 是开源的,理想情况下有人可以为此提供补丁(请参阅 http://pydev.org/developers.html 获取代码)。

否则,您可以在 https://sw-brainwy.rhcloud.com/tracker/PyDev 创建工单 ;)