当我开始使用Atom文本编辑器时,我使用了tab-indentation但希望更改为4-space-indentation。
我有几个应该相应更新的文件
最简单的方法是什么?
答案 0 :(得分:62)
在Mac上激活命令选项板( Shift Cmd P , Ctrl Shift P 在Windows / Linux上)并搜索"转换空间"或"转换标签"。你应该找到这三个命令:
在评论中您观察到使用"将标签转换为空格"会破坏Python中的缩进,但是"将所有标签转换为空格"工作正常。你问两者之间的区别是什么。
我不知道答案,所以我去看了。这是在"空白"中定义的。包,其源可以在atom/whitespace的Github上找到。
查看lib/whitespace.js,我发现了这个:
'whitespace:convert-tabs-to-spaces': () => {
let editor = atom.workspace.getActiveTextEditor()
if (editor) {
this.convertTabsToSpaces(editor)
}
},
'whitespace:convert-spaces-to-tabs': () => {
let editor = atom.workspace.getActiveTextEditor()
if (editor) {
return this.convertSpacesToTabs(editor)
}
},
'whitespace:convert-all-tabs-to-spaces': () => {
let editor = atom.workspace.getActiveTextEditor()
if (editor) {
return this.convertTabsToSpaces(editor, true)
}
}
如您所见,此处的相关功能为convertTabsToSpaces
。在"转换所有"变体,唯一的区别是传递了第二个(可选)参数,并设置为true
。
return this.convertTabsToSpaces(editor, true)
查看convertTabsToSpaces
的定义,区别在于正则表达式是根据此布尔参数的状态而改变的。
convertTabsToSpaces (editor, convertAllTabs) {
let buffer = editor.getBuffer()
let spacesText = new Array(editor.getTabLength() + 1).join(' ')
let regex = (convertAllTabs ? /\t/g : /^\t+/g)
buffer.transact(function () {
return buffer.scan(regex, function ({replace}) {
return replace(spacesText)
})
})
return editor.setSoftTabs(true)
}
这里的相关行是:
let regex = (convertAllTabs ? /\t/g : /^\t+/g)
所以在"转换所有"变体,正则表达式并不关心被锚定到行的开头(^
未被使用),并且每个选项卡都是自己的替换(而不是将一组制表符作为单个替换 - { {1}}与\t
)。
我不知道您使用的是哪个文件,但我使用了一个非常简单的测试文件,完全缩进了标签字符。
\t+
使用"将标签转换为空格"它看起来像这样:
import foo
class Foo():
def __init__(self):
self.foo = True
def bar(self, a, b):
return a + b
哇!那现在是import foo
class Foo():
def __init__(self):
self.foo = True
def bar(self, a, b):
return a + b
。再次使用"将所有标签转换为空格":
SyntaxError
这是因为在第一种情况下,左边距上的选项卡组作为集合,缩减为基于空格的缩进。由于正则表达式是import foo
class Foo():
def __init__(self):
self.foo = True
def bar(self, a, b):
return a + b
,如果该行用1,2,8,24个标签缩进,则无关紧要......它们都被一个缩进级别替换,但由空格组成。 / p>
老实说,我不知道那是什么意思......这似乎是一个错误。
在第二种情况下,每个标签都转换为等效的基于空格的宽度(即每个标签转换为4个空格,即使它与另一个标签字符相邻)。
这就是你想要的那个。
一个警告:它不再局限于左边距(没有^\t+
锚点),因此如果您在其他地方嵌入了制表符,那么这些字符也将被转换。根据我的经验,这不是代码中的常规做法,但仅供参考,以防对您来说很重要。
答案 1 :(得分:11)
我在一些研究后发现的一个简单的解决方案是使用"全部替换"工具。
打开每个文件,然后在Mac中打开“查找面板”( cmd F )。
在当前缓冲区中查找(激活use regex
选项):
\t
替换当前缓冲区:
#that being just four spaces
答案 2 :(得分:0)
如果要替换适当的制表符,则需要指定长度,否则它也将匹配单词之间的单个空格。
按 ctrl + F 并在第一行中输入 [\ t] {4} ,在第二行中输入 4个空格
之后,我还将建议安装软件包 python-indent 来根据PEP8
处理缩进答案 3 :(得分:0)
包-> 空格-> 将所有制表符转换为空格
答案 4 :(得分:0)
包 -> 空格 -> 将所有制表符转换为空格