Mengatur preferensi spasi putih Vim berdasarkan tipe file

155

Di tempat kerja saya, saya harus mengikuti gaya rumah untuk indentasi, yang berbunyi sebagai berikut:

  • 2 spasi saat coding html dan ruby
  • tab saat coding javascript, dengan tabwidth = 4 direkomendasikan

Apa cara terbaik untuk menentukan preferensi spasi putih berbeda per jenis file?

nelstrom
sumber
kemungkinan duplikat dari perubahan perilaku indentasi Vim dengan tipe file
acgtyrant
Semua jawaban ini hanya membuat saya semakin bingung. Masalahnya adalah bahwa opsi terserah preferensi. Jawaban yang diterima memiliki sintaks yang bagus. Ini adalah panduan yang sangat baik: vimcasts.org/transcripts/2/en
Mikael Lindlöf

Jawaban:

245

ada banyak cara, tapi ini cara yang sederhana, mudah dimengerti. tambahkan baris ini ke ~/.vimrc:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4
Peter
sumber
27
ts = 'jumlah spasi yang <Tab> dalam file menggunakan' sts = 'jumlah spasi yang <Tab> gunakan saat mengedit' sw = 'jumlah ruang yang akan digunakan untuk langkah indentasi (otomatis)' untuk perinciannya lihat: vimdoc.sourceforge .net / htmldoc / quickref.html # option-list
zdsbs
Saya perlu menambahkan diperluas di setidaknya untuk ruby, lihat jawaban dengan 'terlalu banyak php' di sini
Michael Durrant
87

Jawaban Peter cukup mudah, tetapi sayangnya pilihannya tidak tepat. Anda harus menggunakan opsi berikut ini sebagai gantinya:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

Juga mencatat:

  • Anda dapat membuat vim menampilkan karakter tab dengan menggunakan :set list.
  • Setelah Anda mengatur opsi tab / spasi dengan benar, Anda dapat membuat vim memperbaiki file (ganti spasi dengan tab atau sebaliknya) menggunakan :retab!perintah.
terlalu banyak php
sumber
2
Apa manfaat dari expandtabkelebihansts=2
James McMahon
12
@JamesMcMahon expandtab memperluas semua tab ke spasi. sts (softtabstop) menyisipkan spasi dan tab untuk indentasi: sebanyak mungkin tab yang sesuai dengan indentasi berdasarkan ukuran tabstop, dan kemudian spasi setelahnya. Tentu saja, jika ekspansi tab aktif, semua tab yang disisipkan dikonversi ke spasi. stackoverflow.com/questions/1562336/… dapat membantu lebih lanjut. Tanpa tab Perluas, jawaban Peter akan menyisipkan tab yang lebar 2 karakter, bukan spasi.
ajmccluskey
35

+1 untuk jawaban Peter, tetapi Vim memberikan solusi lain juga. Jika Anda ingin melakukan sesuatu yang lebih rumit daripada satu setlocal, seperti mengatur sejumlah besar opsi, perintah, dan pemetaan sekaligus, maka fitur plugin filetype vim datang untuk menyelamatkan.

Anda harus memiliki filetype plugin onatau filetype plugin indent ondi dalam Anda .vimrc, dan kemudian membuat plugin untuk misalnya ruby ​​yang dapat Anda buat ~/.vim/ftplugin/ruby.vim. Secara teknis Anda dapat menggunakan perintah Anda seperti di sini, yang akan dijalankan ketika file Ruby dimuat, tapi yang direkomendasikan meliputi setlocal, map <buffer>, command -buffer, dan fungsi mendefinisikan. Banyak informasi lainnya ada di Panduan Pengguna; jika Anda cukup terbiasa dengan skrip vim kemudian lompat ke :help 41.11, jika tidak baca :help usr_40dan :help usr_41.

hobbs
sumber
10

Ada juga skrip vim yang bagus: DetectIndent yang mencoba mendeteksi lekukan file yang Anda buka. Ini sangat berguna jika Anda bekerja dengan banyak file dengan gaya pengkodean yang berbeda.

Saya menggunakan perintah otomatis di .vimrc saya :

:autocmd BufReadPost * :DetectIndent 
Benedikt Waldvogel
sumber
0

Untuk menyisipkan karakter spasi setiap kali tombol tab ditekan, setel opsi 'bentangkan':

:set expandtab

Langkah selanjutnya adalah mengontrol jumlah karakter spasi yang akan dimasukkan ketika tombol tab ditekan, atur opsi 'tabstop'. Misalnya, untuk menyisipkan 2 ruang untuk sebuah tab, gunakan:

:set tabstop=2

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

bartoindahouse
sumber