Bagaimana saya memberi tahu vim bahwa beberapa ekstensi file adalah sama?


21

Saya mengedit kode C ++ di .cppfile, sedangkan kode template masuk ke .tccfile. Ketika saya membuka file seperti itu, tidak ada penyorotan sintaks yang tersedia. Saya mencoba set syntax=cppdalam tpp.vimfile dalam ~/.vim/ftplugin/, tetapi tidak melakukan apa-apa, sementara di editor berfungsi. Apakah ada cara agar vim memperlakukan ekstensi tertentu sebagai identik dengan yang lain?

Jawaban:


19

Pendekatan yang disukai adalah membuat ~/.vim/filetype.vim, sebagaimana disebutkan dalam :help 43.2dan dijelaskan dalam Vim FAQ 26.8 :

Alternatif yang lebih baik untuk pendekatan di atas adalah membuat file filetype.vim di direktori ~ / .vim (atau di salah satu direktori yang ditentukan dalam opsi 'runtimepath') dan tambahkan baris berikut:

" my filetype file
if exists("did_load_filetypes")
    finish
endif
augroup filetypedetect
    au! BufRead,BufNewFile *.x       setfiletype c
augroup END

Edit:

The did_load_filetypesseharusnya tidak menyebabkan gangguan apa pun; itu hanya akan membutuhkan Vim restart setelah diubah.

Hal ini diperlukan untuk menghindari pemuatan file yang banyak dan tidak perlu, dan ini diwarisi dari file dasar ($ VIMRUNTIME / filetype.vim):

" Vim support file to detect file types
"
" Maintainer:   Bram Moolenaar <Bram@vim.org>
" Last Change:  2014 Jun 12

" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
  finish
endif
let did_load_filetypes = 1

Untuk informasi lebih lanjut, periksa :help new-filetype.


Mengapa ifpernyataan itu? Jika saya membiarkannya, autocmds tidak dieksekusi untuk saya.
oarfish

@oarfish bahkan jika Anda me-restart Vim?
mMontu

Ok, ini aneh. Saya harus au!pernyataan dalam grup, yaitu au! BufRead,BufNewFile *.py setfiletype pythondan di baris di bawah ini au! BufRead,BufNewFile *.tpp setfiletype cpp. Tetapi hanya yang kedua yang benar-benar berfungsi. Mengedit .pyfile tidak mengatur jenis file menjadi python. Aku bukan vim-guru jadi aku mungkin melewatkan sesuatu.
oarfish

@ oarfish jika Anda memeriksa file yang saya sebutkan di edit Anda akan menemukan bahwa itu sudah berisi baris au BufNewFile,BufRead *.py,*.pyw setf python, jadi baris pertama Anda tidak relevan. Masalah Anda mungkin di tempat lain.
mMontu

"Editing .py files does not set the file type to python"- apa output dari :set ftkasus itu? Jika bukan python, coba ikuti prosedur di Vim-FAQ 2.5 - Saya punya masalah "xyz" (beberapa) dengan Vim
mMontu

14

Anda dapat melakukannya (di global Anda .vimrc):

autocmd BufEnter *.tpp :setlocal filetype=cpp

autocmd BufEnter *.cuf :setlocal filetype=fortranuntuk memperlakukan file CUDA Fortran sebagai Fortran
khaverim

1

Satu juga bisa memiliki: au BufRead,BufNewFile *.tpp setlocal filetype=cppdi mereka .vimrcsehingga saat membuka file dengan .tppekstensi, filetype ditetapkan untuk C ++


1
Ini tampaknya pada dasarnya identik dengan jawaban @ edi9999. Bisakah Anda menguraikan mengapa menggunakan BufRead,BufNewFilebukan BufEnter?
oarfish

@oarfish Tidak masalah saya pikir terlalu banyak, tapi saya lebih suka BufRead,BufNewFilesebelumnya BufEnterkarena dalam dokumen ( :help BufEnter) menyatakan: "BufEnter: .... Juga dieksekusi ketika mulai mengedit buffer, setelah perintah otomatis BufReadPost." di mana BufReadPost identik dengan BufRead . Selain itu, saya tidak percaya :diperlukan sebelum setlocaljadi saya juga dihilangkan dalam jawaban saya. (Saya mungkin telah menafsirkan ini sepenuhnya salah, senang mendengar diskusi lebih lanjut)
tallamjr
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.