Come posso dire a Vim che alcune estensioni di file sono sinonimi?


21

Modifico il codice C ++ nei .cppfile, mentre il codice del modello va nei .tccfile. Quando apro un file del genere, non è disponibile l'evidenziazione della sintassi. Ho provato set syntax=cppcon un tpp.vimfile in ~/.vim/ftplugin/, ma non fa nulla, mentre nell'editor funziona. C'è un modo per far sì che vim tratti estensioni specifiche come sinonimo di altre?

Risposte:


19

L'approccio preferito è quello di creare un ~/.vim/filetype.vim, come menzionato :help 43.2e spiegato nella FAQ 26.8 di Vim :

Un'alternativa migliore all'approccio sopra è creare un file filetype.vim nella directory ~ / .vim (o in una delle directory specificate nell'opzione 'runtimepath') e aggiungere le seguenti righe:

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

Modificare:

Non did_load_filetypesdovrebbero causare problemi; richiederebbe un riavvio di Vim solo dopo che è stato modificato.

È necessario per evitare il caricamento multiplo e non necessario di questo file ed è ereditato dal file di base ($ 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

Per maggiori informazioni controlla :help new-filetype.


Perché la ifdichiarazione? Se lo lascio dentro, gli autocmds non vengono eseguiti per me.
Remo

@oarfish anche se riavvii Vim?
mMontu,

Ok, questo è strano. Devo au!dichiarazioni nel gruppo, vale au! BufRead,BufNewFile *.py setfiletype pythona dire e nella riga sotto au! BufRead,BufNewFile *.tpp setfiletype cpp. Ma solo il secondo funziona davvero. La modifica dei .pyfile non imposta il tipo di file su python. Non sono esattamente un vim-guru quindi probabilmente mi manca qualcosa.
Remo

@oarfish se controlli il file che ho citato nella modifica scoprirai che contiene già una riga au BufNewFile,BufRead *.py,*.pyw setf python, quindi la tua prima riga è irrilevante. Il tuo problema è probabilmente altrove.
mMontu,

"Editing .py files does not set the file type to python"- Qual è l'output di :set ftquel caso? Se non è Python, prova a seguire la procedura in Vim-FAQ 2.5 - Ho un problema "xyz" (alcuni) con Vim
mMontu,

14

Potresti fare (nel tuo globale .vimrc):

autocmd BufEnter *.tpp :setlocal filetype=cpp

autocmd BufEnter *.cuf :setlocal filetype=fortranper trattare i file CUDA Fortran come Fortran
khaverim il

1

Si potrebbe anche avere: au BufRead,BufNewFile *.tpp setlocal filetype=cppnella loro .vimrctale che all'apertura di un file con .tppestensione, il tipo di file è impostato per C ++


1
Questo sembra essere sostanzialmente identico alla risposta di @ edi9999. Puoi approfondire il motivo per cui utilizzare BufRead,BufNewFileinvece di BufEnter?
Remo

@oarfish Non importa troppo, ma preferisco in BufRead,BufNewFileanticipo BufEnterperché in docs ( :help BufEnter) afferma: "BufEnter: .... Eseguito anche quando si inizia a modificare un buffer, dopo i autocomandi BufReadPost." dove BufReadPost è sinonimo di BufRead . Inoltre, non credo :sia necessario prima, setlocalquindi ho omesso anche quello nella mia risposta. (Avrei potuto interpretarlo completamente sbagliato, felice di sentire ulteriori discussioni)
tallamjr,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.