1 - Jika Anda memiliki spasi dan ingin tab.
Pertama, Anda perlu memutuskan berapa banyak ruang yang akan memiliki satu tab. Yang mengatakan, misalkan Anda memiliki garis dengan memimpin 4 spasi, atau 8 ... Dari yang Anda sadari Anda mungkin ingin tab menjadi 4 spasi. Sekarang dengan info itu, Anda lakukan:
:set ts=4
:set noet
:%retab!
Ada masalah di sini! Urutan perintah ini akan mencari semua teks Anda, tidak hanya spasi di awal baris. Itu berarti string seperti: "Hey,␣this␣␣␣␣is␣4␣spaces"
akan menjadi "Hey,␣this⇥is␣4␣spaces"
, tetapi tidak! itu tab !.
Untuk menyelesaikan masalah kecil ini saya merekomendasikan search
, bukannya retab
.
:%s/^\(^I*\)␣␣␣␣/\1^I/g
Pencarian ini akan mencari di seluruh file untuk setiap baris yang dimulai dengan jumlah tab apa pun, diikuti oleh 4 spasi, dan menggantinya dengan jumlah tab apa pun yang ditemukan ditambah satu.
Sayangnya, ini tidak akan berjalan sekaligus!
Pada awalnya, file akan memiliki garis yang dimulai dengan spasi. Pencarian kemudian akan mengkonversi hanya 4 spasi pertama ke tab, dan biarkan yang berikut ...
Anda harus mengulangi perintahnya. Berapa kali? Sampai Anda mendapatkan pattern not found
. Saya belum bisa memikirkan cara untuk mengotomatiskan prosesnya. Tetapi jika Anda melakukannya:
`10@:`
Anda mungkin sudah selesai. Perintah ini mengulangi pencarian / penggantian terakhir untuk 10 kali. Sepertinya program Anda tidak akan memiliki banyak indentasi. Jika sudah, ulangi lagi @@
.
Sekarang, cukup lengkapi jawabannya. Saya tahu Anda meminta yang sebaliknya, tetapi Anda tidak pernah tahu kapan Anda harus membatalkan sesuatu.
2 - Anda memiliki tab dan ingin spasi.
Pertama, tentukan berapa banyak ruang yang Anda ingin tab Anda konversi. Katakanlah Anda ingin setiap tab menjadi 2 spasi. Anda kemudian melakukan:
:set ts=2
:set et
:%retab!
Ini akan memiliki masalah yang sama dengan string. Tetapi karena gaya pemrogramannya yang lebih baik untuk tidak menggunakan tab keras di dalam string, Anda sebenarnya melakukan hal yang baik di sini. Jika Anda benar-benar membutuhkan tab di dalam string, gunakan \t
.
sed "s/ +/`echo -e '\t'`/g" < input.py > output.py
) muncul untuk mengonversi semua spasi, bukan hanya memimpin spasi. Dalam contoh kedua (sed "s/^ +/`echo -e '\t'`/g" < input.py > output.py
) itu hanya mengganti spasi pertama pada setiap baris dengan tab dan meninggalkan sisanya.