afaik reindent.py
(在標準python示例中提供)有一個標記器,允許它根據縮進級別進行智能縮進,而不是根據每個級別提供的空間數量進行智能縮進(可以改變在錯誤的代碼)reverse reindent.py(空格到製表符)
不幸的是它強制4空間縮進,但我想標籤,因爲1標籤== 1縮進級別比X空間更邏輯。
this問題有沒有合適的答案:
- 我不關心PEP-8(我知道怎麼寫我的代碼)安裝
- VIM,但
:retab!
不處理不一致的縮進 - 所有工具都將用於對齊(!=縮進)的空格轉換爲製表符。
一種方法是使用reindent.py,然後做某事。像:
#!/usr/bin/env python3
from re import compile
from sys import argv
spaces = compile("^ +")
multistr = False
for line in open(argv[1]):
num = 0
if not multistr:
try:
num = len(spaces.search(line).group(0)) // 4
except AttributeError:
pass
print("\t"*num + line[num*4:-1])
if line.count('"""') % 2 == 1:
multistr = not multistr
但這是相當hacky。有沒有non-zealot版本的reindent.py?
PS:爲什麼暗示突出// 4
是一個評論,而不是一個截斷分裂?
下面的腳本應該做的伎倆,但無論我錯過了某事,或記號化是越野車(或Python文檔中的例子)
#!/usr/bin/env python3
from tokenize import *
from sys import argv
f = open(argv[1])
def readline():
return bytes(f.readline(), "utf-8")
tokens = []
ilvl=0
for token in tokenize(readline):
if token.type == INDENT:
ilvl+=1
tokens.append((INDENT, "\t"*ilvl))
else:
if token.type == DEDENT:
ilvl-=1
tokens.append(token)
print(untokenize(tokens).decode('utf-8'))
關於PS:你知道'//'是很多語言的評論標記......不要太狂熱...... :) – neurino 2011-05-17 14:12:14
我知道我有時候很喜歡狂熱,但是這段代碼是突出顯示爲python,其中'//'表示「截斷分割」的語言。突出顯示該操作符後的所有內容(css-class'com'; gray)顯然是錯誤的。 – 2011-05-17 14:20:11
你從語法higligher檢查問題標籤的想法開始......這是不正確的。 :) – neurino 2011-05-17 14:21:59