Saya telah menyalin beberapa kode dari Internet yang memiliki indentasi 2 spasi dan saya ingin mengubahnya menjadi indentasi 4 spasi. Saya ingin tahu apakah ada rutinitas vim singkat untuk menyelesaikan tugas tanpa harus menulis skrip vim? Berikut adalah cara saya melakukannya dengan file HTML:
- Rekam makro
- Pergi ke awal baris
- Visual pilih semua spasi hingga kemunculan pertama "<"
- Tarik dan tempel semua spasi (pada dasarnya untuk menggandakannya)
- Putar ulang makro hingga akhir file
Pendeknya qa0vt<yp<esc>jq
Jebakan:
Makro gagal untuk baris kosong atau baris yang tidak dimulai dengan "<". Dan saya tidak tahu bagaimana memperluas solusi ini ke file non-HTML.
ts
: =tabstop
,sts
: =softtabstop
dan[no]et
: =[no]expandtab
.retab
argumen akan berguna, dan mengapa kita tidak bisa menggunakannya untuk tugas ini?:set sts=2 noet
dan:retab! 2
karenanya akan menjadi sedikit lebih pendek (meskipun mungkin kurang terbaca) seperti itu.:set ts=2 sts=2 noet | retab! | set ts=4 sts=4 et | retab!
lalu gunakan@:
di file yang berbeda untuk menerapkan tindakan yang sama dengan cepat.Ini dimungkinkan dengan
:set shiftwidth=4
dangg=G
.sumber
gg=G
artinya dengan exatly? Saya mengerti itugg
artinya "pindah ke 1,1", danG
berarti "pindah ke baris terakhir".=
melakukan indentasi, jadi itu hanya berarti membuat indentasi dari awal hingga akhir teks%retab
, yang salah mengonversi ruang yang tertanam di dalam literal string.Apa yang saya lakukan sangat mirip dengan pendekatan esneider dan cforbish, tetapi sedikit lebih cepat untuk mengetik:
Cukup ganti spasi utama (spasi atau tab) dengan spasi utama dua kali lebih banyak (
&
diganti dengan ekspresi yang cocok).sumber
%
.sed
dan diterapkan ke semua file dalam direktori superuser.com/a/159286/41494Saya menggunakan ekspresi reguler ini (ini menggandakan jumlah spasi di depan):
sumber
%s/\s\+/&&/
melakukan hal yang sama? Btw, saya pikirg
bendera itu tidak perlu (untuk satu, hanya akan ada 1 pertandingan^pattern
di setiap baris, bukan?)%s/^\s\+/&&/g
lebih dekat.Ini adalah pertanyaan yang sangat lama, namun semua jawabannya ... salah ... Vim memiliki cara yang sangat mudah untuk mengindentifikasi kembali seluruh file. Saya belajar ini setelah menulis fungsi saya sendiri untuk melakukannya, jadi saya berada dalam perahu ketidaktahuan yang sama;)
Tipe
ini mengasumsikan bahwa Anda mengatur tabstop sesuai keinginan Anda, (jadi untuk OP itu akan menjadi ts = 4)
Saya mempelajari ini dari http://vim.wikia.com/wiki/Fix_indentation , yang menyebutkan
sumber
Mirip (tetapi lebih sederhana) dengan jawaban cforbish, ekspresi reguler ini akan menduplikasi spasi di depan
Atau Anda dapat menggunakan regex lain ini untuk mengubah 2 spasi menjadi 4 spasi, mempertahankan satu spasi (dan jumlah ganjil pada umumnya)
Itu adalah,
sumber
Selain jawaban @ spro, saya memasukkan ini ke dalam file
.vimrc
Ketik saja
:Format
.Dengan pemilihan visual, ini hanya memformat garis yang dipilih.
Tanpa seleksi visual, ini memformat seluruh file.
sumber
Ini adalah varian dari jawaban berbasis ekspresi reguler.
Saya memiliki skrip bash di direktori bin lokal saya yang akan menggandakan jumlah spasi putih di awal baris. Input dapat berupa stdin atau file:
Saya menggunakan ini dalam vim dengan memilih baris secara visual dan mengeluarkan perintah berikut:
Ini membuat saya tidak perlu mengetik (atau mengingat) regex.
Saya juga menggunakannya di peta seperti berikut:
yang akan menerapkannya ke blok teks yang baru saja ditempel. Saya biasanya menggunakan peta berikut untuk menempelkan
:set paste
Alur kerja saya yang biasa adalah:
atau hanya mengubah indentasi pada blok yang ditarik yang ditempelkan dari buffer lain.
sumber