Apakah ada cara untuk secara otomatis menghapus tab semua file sumber Anda dengan menggunakan perintah? [Tutup]


11

Dan kemudian secara otomatis kembali indentasi setelah itu? Saya sudah mencoba menyalin kode dari satu layar terminal ke yang lain, tetapi tabulasi menjadi kacau.

Saya tidak tahu harus memanggil apa fungsi ini, jadi sulit bagi saya untuk menemukannya di google (yang umumnya mengembalikan hal-hal yang terkait dengan cara mengatur ukuran tab, yang sayangnya bukan yang saya cari).



1
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena ini tentang alat pemrograman. Pertanyaan tentang alat-alat yang lebih cocok untuk StackOverflow , atau dalam hal ini, Vi.SE . Namun, pertanyaan ini terlalu lama untuk dimigrasi.

1
Aku voting untuk menutup pertanyaan ini sebagai off-topik karena itu adalah tentang penggunaan alat tertentu dan harus telah diminta pada Stack Overflow atau (jika diminta sekarang) vi.se .

Jawaban:


9

Vim memiliki retabperintah yang memungkinkan Anda untuk melakukan tabifikasi atau membatalkan penghapusan dokumen Anda. Ini menggunakan pengaturan seperti tabstopdan expandtab. Jadi, jika Anda ingin mengganti tab dengan spasi, Anda bisa melakukan hal berikut:

:%retab

Lihat retabdokumentasi untuk detail lengkap.

Caveat Emptor : ini juga menggantikan tab yang TIDAK di awal baris. Jadi jika Anda menggunakan tab keras di tengah-tengah string mereka akan diganti juga.


3
Secara umum, itu dianggap ide yang buruk untuk memasukkan tab yang benar dalam sebuah string. Itu masih bisa terjadi, tetapi \tlebih disukai, hanya untuk menghindari masalah seperti ini.
Spencer Rathbun

6

Untuk memperluas jawaban @ Kaleb (saya belum memiliki perwakilan untuk berkomentar), sebelum menjalankan perintah retab, Anda harus melakukannya :set expandtab (set et). Kalau tidak, retab tidak akan mengganti tab dengan spasi.

Selain itu, Anda mungkin ingin menentukan tabstop. Seringkali dalam kode sumber yang dibuat oleh orang lain, kode ditulis dengan tabstop diatur ke 4 atau bahkan 2. Sebelum melakukan :%retabperintah, bereksperimen dengan tabstop yang berbeda. Mencoba

:set ts=8 (the default)
:set ts=4 
:set ts=2  

untuk melihat pengaturan mana yang paling masuk akal.

Untuk mundur (mengganti spasi dengan karakter TAB yang sesuai, gunakan

:set noet
:%retab!

1

Dengan membatalkan tab, apakah maksud Anda mengubah tab menjadi spasi? Jika demikian, ganti spasi untuk tab di seluruh buffer seperti ini:

:%s/^I/    /g

Itu empat ruang di sisi kanan substitusi, tetapi Anda dapat membuatnya berapa pun angka yang Anda inginkan. Untuk mendapatkan ^Ikarakter tab literal , Anda dapat menekan ^Vdiikuti oleh tombol Tab.

Anda dapat indentasi ulang dengan =perintah. Untuk membuat ulang seluruh isi buffer, gunakan perintah ini:

gg
=G

Ini akan membawa Anda ke atas, lalu mengubah kembali semua ke bawah.


-1: Mengganti tab dengan jumlah ruang tetap hampir tidak pernah berguna. Ini akan mengubah tampilan baris apa pun yang berisi tab yang diawali oleh non-tab.
kevin cline
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.