Apakah mungkin untuk mengonversi tab menjadi spasi, sambil mempertahankan perataan teks?
Cukup mengganti hanya berfungsi bila tidak ada karakter utama.
indentation
tab-characters
gagasanman42
sumber
sumber
:h vim-faq
dan cari/tab characters
. Tag yang sulit diingat adalah:h faq-14.16
.Jawaban:
Anda bisa menggunakan
:retab
perintah. Dari:help :retab
Perhatikan bahwa perintah menerima rentang, sehingga Anda dapat membuat pemilihan visual dan kemudian hanya
:retab
garis yang dipilih.sumber
Namun, Anda dapat menggunakan
:retab
, seperti yang dinyatakan, ini akan mengubah semua tab menjadi spasi, tidak hanya tab di awal barisJadi ini (di mana
⇥
karakter tab):diubah menjadi (di mana
␣
karakter spasi):Ini dapat menghasilkan efek samping yang tidak terduga dalam beberapa skenario, dan itu bahkan lebih menjadi masalah ketika mengubah spasi menjadi tab!
Jadi, saya menulis sedikit fungsi untuk mengubah hanya tab / spasi di awal baris:
Dengan versi ini, Anda harus menentukan secara manual
expandtab
dalam panggilan fungsi (mis.:call Retab(1)
Untuk mengubah tab menjadi spasi), tetapi Anda juga dapat memodifikasinya untuk mengambil nilai saat ini&expandtab
(seperti yang sudah terjadi dengan&tabstop
) sama seperti:retab
halnya. (Kebetulan saya lebih suka menentukannya secara manual).sumber
a
diif a:expandtab
berarti?set expandtab
di .vimrc laluautocmd BufWritePre * :call Retab(&expandtab)
- indentasi akan diubah menjadi tab, alih-alih spasi.Vim menyediakan
!retab
perintah yang akan mengganti semua urutan<Tab>
dengan string white-space baru menggunakan nilai tabstop baru (misalnya:set tabstop=2
) yang diberikan, tetapi semua tab di dalam string dapat dimodifikasi (misalnya dalam program C, Anda harus menggunakan\t
untuk menghindari ini)!Jadi atau Anda dapat mengubah semua tab menjadi spasi menggunakan perintah berikut:
atau seperti yang disarankan oleh @Shahbaz :
Jadi hanya tab yang digunakan dalam indentasi yang dikonversi.
Penjelasan:
%
mewakili seluruh buffer / file (:help :%
)s
singkatan pengganti (:help sub-replace-special
)\t
, atau^I
kependekan dari tab- Gunakan ruang sebanyak yang Anda butuhkan per satu tab
g
- singkatan global, dan itu akan mengonversi banyak kemunculan tab di baris yang samaKemudian untuk memperbaiki lekukan dari seluruh file, Anda dapat mencoba: gg=G. Periksa: Mengindeks ulang kode yang indentasi buruk untuk detail lebih lanjut.
Untuk menggunakan spasi secara default alih-alih tab, Anda perlu menambahkan pengaturan berikut ke
.vimrc
file Anda :Solusi alternatif adalah menggunakan
tidy
Terkait:
sumber
%s/^\t\+/ g
sehingga hanya tab yang digunakan dalam indentasi yang dikonversi. Juga,gg=G
bisa menjadi bencana besar dengan bahasa seperti python.Coba gunakan:
expand
adalah alat baris perintah untuk mengonversi tab menjadi spasi, yang bisa Anda jalankan dari shell atau dengan:!expand
.Ada dalam POSIX sehingga harus tersedia di sebagian besar sistem.
unexpand
akan melakukan yang sebaliknya.sumber
expand
?:%!expand -t 4
di dalam vim. Lebih baik lagi, Anda juga bisa menggunakan opsi lebar shift saat ini::exe '%!expand -t ' . &shiftwidth
Untuk kelengkapan,
=
bisa juga digunakan untuk memperbaiki lekukan, setelah Anda menentukan bahwa tab diganti dengan spasi. Dalam mode normal, Anda dapat melakukannya dengan mengetik:set expandtab
. Kemudian=
dapat digunakan dalam dua cara:=
akan memperbaiki lekukan blok kode yang dipilih.gg=G
akan memperbaiki seluruh file, di managg
memindahkan kursor ke awal file, kemudian=
diterapkan, danG
memindahkan kursor ke akhir file.Referensi: tautan
sumber