Bagaimana saya bisa mengubah indentasi default berdasarkan filetype?

34

Saya ingin memiliki lekukan yang berbeda berdasarkan jenis file yang saya kerjakan. Misalnya, mengerjakan .cfile yang saya ingin lekukan saya menjadi 4 spasi. Dalam .htmlfile saya ingin (harus) bekerja dengan tab.

Bagaimana saya mencapainya?

DeltaLima
sumber

Jawaban:

25

Metode terbaik adalah menempatkan pengaturan tersebut ~/.vim/after/ftplugin/<filetype>.vim.

Untuk HTML (dengan asumsi Anda menginginkan tab dengan lebar 4 karakter):

~/.vim/after/ftplugin/html.vim

setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab

Menggunakan ftplugin lebih disukai daripada menggunakan autocommands karena Vim sudah melakukan pemeriksaan tipe file dengan sendirinya dan sudah mencoba untuk mencari ftplugin yang memadai sehingga tidak ada alasan untuk memaksa lebih banyak lagi pemeriksaan dan mengimplementasikan kembali roda.

- edit -

Dengan asumsi Anda memiliki filetype plugin ondi vimrc- Anda harus - Vim akan mencoba untuk mendeteksi tipe file dari file yang Anda edit dan, setelah tipe file yang benar ditemukan dan ditetapkan untuk buffer, cobalah untuk mencari ftplugin yang sesuai di lokasi standar ini:

$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim

Semua itu terjadi secara otomatis jadi, jika tipe file Anda dikenali oleh Vim, sama sekali tidak ada alasan untuk menambahkan logika deteksi tipe file: cukup tambahkan pengaturan Anda ke ftplugin yang tepat dan Anda baik-baik saja.

romainl
sumber
Apakah saya perlu mengaktifkan ftplugin, entah bagaimana, atau membuat file akan mengaktifkannya secara otomatis?
DeltaLima
Pastikan Anda memiliki filetype plugin indent ondi vimrc.
romainl
1
@DeltaLima vim memiliki jalur yang dilaluinya untuk memeriksa pengaturan. Selama filetype plugin ondiatur, jalur vim menyertakan ftplugin/<filetype>.vimdan after/ftplugin/<filetype>/vimfile di jalurnya.
davidlowryduda
@DeltaLima, silakan lihat edit saya.
romainl
14

Anda dapat melakukan ini dengan perintah otomatis di .vimrc.

Sebagai contoh, saya memiliki fungsi html_like_modeyang mengatur berbagai hal untuk mengedit file HTML. Di saya .vimrc, saya punya:

au BufNewFile,BufRead *.html call s:html_like_mode()

Itu kunci dari ekstensi file. Anda juga dapat mengunci jenis file, jika Anda mengaktifkannya:

au FileType perl setlocal equalprg=perltidy

Seperti yang dapat Anda lihat, Anda dapat membuatnya melakukan perintah apa pun di sana. Jadi Anda dapat dengan mudah melakukan setlocal shiftwidth 4untuk file * .c Anda.

derobert
sumber
9

augroupmemungkinkan Anda untuk mengelompokkan autocommand terkait ke dalam grup bernama. (Lihat di sini untuk mempelajari tentang Grup Perintah Otomatis.) Kami menggunakan augroups untuk menambahkan ~/.vimrcperintah otomatis dengan cara yang tidak akan menambahkan duplikat setiap kali kita sumbernya.

augroup vimrc
  autocmd!
augroup END

autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4
shawndumas
sumber
2
Akan bermanfaat jika Anda menjelaskan apa yang dilakukan dan bagaimana mengaturnya, tidak semua orang akan tahu;)
Seth
3

Digunakan autocmd dan FileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4
avelino
sumber