1 - Boşluklarınız varsa ve sekmeler istiyorsanız.
İlk olarak, kaç boşluğun tek bir sekmeye sahip olacağına karar vermeniz gerekir. Bununla birlikte, 4 boşluklu veya 8 boşluklu satırlarınız olduğunu varsayalım. Şimdi bu bilgi ile şunları yapabilirsiniz:
:set ts=4
:set noet
:%retab!
Burada bir sorun var! Bu komut dizisi, yalnızca satırın başındaki boşlukları değil tüm metninizi arayacaktır. Bu şöyle bir dize anlamına gelir: "Hey,␣this␣␣␣␣is␣4␣spaces"
olacak "Hey,␣this⇥is␣4␣spaces"
, ama değil! onun bir sekme !.
Bu küçük sorunu çözmek için search
bunun yerine bir tavsiye ederim retab
.
:%s/^\(^I*\)␣␣␣␣/\1^I/g
Bu arama, hangi sayıda sekme ile başlayıp ardından 4 boşlukla başlayan tüm satırları tüm dosyaya bakacak ve yerine bulduğu sayıda sekme artı bir tane alacaktır.
Bu, ne yazık ki, bir kerede çalışmaz!
İlk başta, dosya boşluklarla başlayan satırlara sahip olacaktır. Arama daha sonra yalnızca ilk 4 boşluğu bir sekmeye dönüştürür ve aşağıdakileri sağlar ...
Komutu tekrarlamanız gerekiyor. Kaç sefer? Bir elde edene kadar pattern not found
. Süreci otomatikleştirmenin bir yolunu henüz düşünemiyorum. Ama eğer yaparsanız:
`10@:`
Muhtemelen bitirdiniz. Bu komut son aramayı / değiştirmeyi 10 kez tekrarlar. Programınızın çok fazla girintisi olması muhtemel değildir. Varsa, tekrarlayın @@
.
Şimdi, sadece cevabı tamamlamak için. Bunun tam tersini istediğini biliyorum, ama işleri ne zaman geri alman gerektiğini asla bilemezsin.
2 - Sekmeleriniz var ve boşluk istiyorsunuz.
İlk olarak, sekmelerinizin kaç boşluğa dönüştürülmesini istediğinize karar verin. Her sekmenin 2 boşluk olmasını istediğinizi varsayalım. Daha sonra şunları yaparsınız:
:set ts=2
:set et
:%retab!
Bu dizelerle aynı sorunu olurdu. Ancak, dizelerin içindeki sabit sekmeleri kullanmamak için daha iyi programlama stili olduğundan, aslında burada iyi bir şey yapıyorsunuz. Gerçekten bir dize içinde bir sekmeye ihtiyacınız varsa kullanın \t
.
sed "s/ +/`echo -e '\t'`/g" < input.py > output.py
) yalnızca önde gelen boşlukları değil tüm boşlukları dönüştürür. İkinci örnekte (sed "s/^ +/`echo -e '\t'`/g" < input.py > output.py
) yalnızca her satırdaki ilk boşluğu bir sekme ile değiştirir ve geri kalanını bırakır.