【问题标题】:How to keep spaces from becoming tabs in Eclipse (w/ PyDev)如何防止空格成为 Eclipse 中的选项卡(使用 PyDev)
【发布时间】:2015-07-22 05:48:22
【问题描述】:

我有一个不幸的 Eclipse 问题,它只发生在现有的 Python 文件中,其中包含选项卡。它不会发生在空文件或非 .py 文件中。

基本上,如果我尝试复制然后超过 3 个以上的空格,我最终会为每个 X 空格添加制表符,X 是编辑器每个空格设置的字符数。就我而言,这是 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)

在我的一生中,我无法弄清楚为什么会发生这种情况或如何将其关闭。不得不继续手动编辑我粘贴的每一行,而不是得到我一开始复制的内容,这真的很令人沮丧。

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

编辑:要清楚,当我按下制表键时我不想要空格,当我要求制表符时我想要制表符。但是,当我想粘贴一个空格时,我不想更改字符,尤其是当我很清楚我在单引号或双引号之间并且只是尝试按原样编写文本时。

【问题讨论】:

    标签: eclipse whitespace pydev spaces


    【解决方案1】:

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

    Window > Preferences > General > Editors > Text Editors

    或以下:

    Window > preferences > PyDev > Editor

    应该有一些关于空格和标签的选项

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

    然后禁用Assume tab spacing when file contain tabs

    【讨论】:

    • 这显然是自动格式化或自动识别的问题,而不是选项卡的问题。我不是想将制表符变成空格,顺便说一句,这实际上是您答案中任一页面上唯一与制表符相关的选项。
    • 您的文件是否包含选项卡? (在尝试复制/粘贴空格字符之前)
    • 从字面上看是我问题中的第一句话。我不认为你读过我写的任何东西,我想知道你为什么一直回复。
    • 只是想帮忙.... 有时空格会被转换为制表符,因为文件已经包含制表符并希望以这种方式保持格式
    【解决方案2】:

    发生这种情况是因为:

    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 创建工单;)

    【讨论】:

    • 谢谢法比奥,这解释了很多。感谢您将我链接到可以更改或提出问题的地方所付出的额外努力。
    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多