Notepad++ Automatic Detection of Python Tabs or Spaces
我通常使用制表符编写代码,但许多python库使用空格。 Notepad ++是否有任何方法可以自动检测文件的格式,并在文件已经格式化时自动切换到使用空格?
顺便说一句,我知道如何改变Notepad ++的标签格式已经有了一个问题。 但如果它根据当前文件的格式自动更改会更好。
如果为Notepad ++安装"Python Script"插件,则可以编写代码以自动在选项卡和空格之间切换。
这是如何做:
在菜单中:插件 - > Python脚本 - >配置,并将初始化设置为ATSTARTUP。当Notepad ++启动时,
找到
otepad++\plugins\PythonScript\scripts\startup.py
每次切换选项卡时都会调用函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | def guess_tab(text): count = 0 for line in text.split(" "): indents = line[:len(line)-len(line.lstrip())] if"\t" in indents: count += 1 if count > 5: return True else: return False def buffer_active(arg): editor.setBackSpaceUnIndents(True) use_tab = guess_tab(editor.getText()) editor.setUseTabs(use_tab) sys.stderr.write("setUseTabs %s " % use_tab ) notepad.clearCallbacks([NOTIFICATION.BUFFERACTIVATED]) notepad.callback(buffer_active, [NOTIFICATION.BUFFERACTIVATED]) |
这只是一个例子,随意使
这是基于HYRY答案的改进版本:
- 在启动选项卡上工作(当您启动notepad ++以打开文件时)
- 不需要最少量的行来触发缩进检测。缩进猜测是基于第一个遇到的缩进行。
- 当无法检测到缩进时,保留缩进默认值
- 非常高效,打开大文件时不会减慢Notepad ++的速度(在220 MB文件上测试,缩进检测只需<300 ms)
可从此处下载:https://gist.github.com/vincepare/8a204172d959defb2122
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import re import time def indent_guess_tab(text): for line in text.split(" "): pattern = re.compile("^( {4,}|\t)") match = pattern.match(line) if (match): return True if ("\t" in match.group(1)) else False def indent_auto_detect(arg): start = time.clock() # Get text sample maxLen = 500000 len = editor.getTextLength() len = len if len < maxLen else maxLen sample = editor.getTextRange(0, len) # Indent set current_use_tab = editor.getUseTabs() use_tab = indent_guess_tab(sample) if (use_tab != None and use_tab != current_use_tab): console.write("Indent use tab switch (%s => %s) " % (current_use_tab, use_tab)) editor.setUseTabs(use_tab) end = time.clock() console.write("Indentation detection took %s ms " % (round((end-start)*1000, 3))) notepad.clearCallbacks([NOTIFICATION.BUFFERACTIVATED, NOTIFICATION.READY]) notepad.callback(indent_auto_detect, [NOTIFICATION.BUFFERACTIVATED]) notepad.callback(indent_auto_detect, [NOTIFICATION.READY]) console.write("Automatic indentation detection started ") indent_auto_detect(None) |
不!
您可以随时更改它们(当然是标签)以在扩展模式下全部替换(