Vim'e bazı dosya uzantılarının eş anlamlı olduğunu nasıl anlarım?


21

.cppŞablon kodu dosyalara giderken dosyalarda C ++ kodunu düzenlerim .tcc. Böyle bir dosyayı açtığımda, sözdizimi vurgulaması yok. Denedim set syntax=cppaa içinde tpp.vimdosyanın ~/.vim/ftplugin/, ancak editörü çalıştığını ederken, hiçbir şey yapmaz. Vim'in belirli uzantıları başkalarıyla eş anlamlı olarak ele almasının bir yolu var mı?

Yanıtlar:


19

Tercih edilen yaklaşım, Vim SSS 26.8'de~/.vim/filetype.vim belirtildiği :help 43.2ve açıklandığı gibi bir a oluşturmaktır :

Yukarıdaki yaklaşıma daha iyi bir alternatif, ~ / .vim dizininde (veya 'runtimepath' seçeneğinde belirtilen dizinlerden birinde) bir filetype.vim dosyası oluşturmak ve aşağıdaki satırları eklemektir:

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

Düzenle:

did_load_filetypesSize herhangi bir soruna yol olmamalıdır; ancak değiştirildikten sonra bir Vim yeniden başlatılması gerekir.

Bu dosyanın birden fazla ve gereksiz yüklenmesini önlemek için gereklidir ve temel dosyadan ($ VIMRUNTIME / filetype.vim) devralınır:

" 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

Daha fazla bilgi için kontrol edin :help new-filetype.


Neden ifaçıklama? Eğer içeri girersem, autocmds benim için çalıştırılmaz.
oarfish

Vim'i yeniden başlatsanız bile @oarfish?
mMontu

Tamam, bu garip. Eğer mecbur au!grubunda, yani içinde tablolar au! BufRead,BufNewFile *.py setfiletype pythonve aşağıdaki doğrultusunda au! BufRead,BufNewFile *.tpp setfiletype cpp. Ama aslında sadece ikincisi çalışıyor. .pyDosyaları düzenlemek , dosya türünü olarak ayarlamaz python. Tam olarak bir vim-guru değilim, bu yüzden muhtemelen bir şey eksik.
oarfish

@oarfish Düzenlemede bahsettiğim dosyayı kontrol ederseniz, zaten bir satır içerdiğini göreceksiniz au BufNewFile,BufRead *.py,*.pyw setf python, bu nedenle ilk satırınız ilgisizdir. Sorununuz muhtemelen başka bir yerde.
mMontu

"Editing .py files does not set the file type to python"- :set ftbu davadaki çıktı nedir? Python değilse, Vim-FAQ
2.5'teki

14

Şunları yapabilirsiniz (globalinizde .vimrc):

autocmd BufEnter *.tpp :setlocal filetype=cpp

autocmd BufEnter *.cuf :setlocal filetype=fortranFortran dosyalarını Fortran olarak ele almak
khaverim

1

Bir de olabilir: au BufRead,BufNewFile *.tpp setlocal filetype=cppkendi uzantısında .vimrcbir dosya açıldıktan sonra C ++.tpp için filetype ayarlanır


1
Bu temelde @ edi9999'un cevabı ile aynı görünüyor. BufRead,BufNewFileBunun yerine niçin kullanılacağını açıklayabilir BufEntermisiniz?
oarfish

@oarfish Bence çok önemli değil, ama BufRead,BufNewFileönceden tercih ediyorum BufEnterçünkü docs ( :help BufEnter) içinde şunu belirtiyor: "BufEnter: .... BufReadPost oto komutlarından sonra bir arabelleği düzenlemeye başlarken de yürütülür ." nerede BufReadPost ile eş anlamlıdır BufRead . Ayrıca, :daha önce gerekli olduğuna inanmıyorum, setlocalbu yüzden cevabımda da atladım. (Bunu tamamen yanlış yorumlamış olabilirim, daha fazla tartışma duymaktan mutluluk duyarım)
tallamjr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.