Bir dosya sistemi dalındaki her dosyadaki tüm sekmeleri 2 boşlukla nasıl değiştirebilirim?


10

Scala'yı kodluyorum ve konvansiyonu, tanımlama için seviye başına çift boşluk kullanmaktır. Ancak farklı editörler kullanmak kaynaklarımı boşluklar ve sekmelerle dolduruyor.

Tüm sekmeleri (* .scala dosyaları, aslında, ancak bunu belirtmek gerekli değildir) (belirli bir dizinde ve tüm temel FS dalında (özyinelemeli)) otomatik olarak tüm sekmeleri çift boşluklarla değiştirerek yeniden düzenlemek istiyorum. Klasik Unix / GNU araçlarıyla bunu yapmanın kolay ve güzel bir yolu olduğuna inanıyorum, ancak bu alanda herhangi bir deneyimim yok. Bana yardım etmek için çok nazik misiniz?

Yanıtlar:


9

Yinelemeli olarak, expand(bu amaçla yapılmış) kullanarak:find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} +

Satır içi düzenlemeyi destekledikleri için sedya da perl(Sardathrion'un cevabına bakın) ile yapardım, ama expandyine de iyi ol 'dan bahsetmek istedim .

EDIT: Bu olurdu find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +


İlk değişken beklendiği gibi çalışır. İkinci (perl) varyantı, sekmeyi iki yerine yalnızca bir boşlukla değiştirir.
Ivan

Evet, üzgünüm: bu biçimlendirme hatasıydı. Kaynak kodu iki boşluk söylüyor, ancak oluşturulan HTML yalnızca bir tane gösteriyor.
janmoesen

10

Bunu yapmalı:

find . -type f -name '*.scala$' -exec sed -i 's/\t/  /g' {} +

Not: Bu test edilmemiştir.


1
Bu henüz özyinelemeli değil. Veya özyineleme için finddestekleyen bir kabuk kullanabilirsiniz **/*.scala.
janmoesen

Özyinelemeli davranış eklemek için düzenlendi ...
Sardathrion - SE kötüye karşı

Lütfen tanıtım yapmayın find | xargs. find -execBunun yerine cevabımda bahsettiğim gibi kullanın . Daha kolay ve daha güvenli.
janmoesen

Bunu denedim, sonuç yok. Komut hemen geri döner ve dosyaların içinde hiçbir şey değişmez.
Ivan

bu test edilmemiştir ancak bunun özü çalışacaktır.
Sardathrion - SE kötüye karşı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.