Comment ajouter du texte squelette aux nouveaux fichiers vim?

9

J'utilise Vim pour écrire en C ++, et j'ai pas mal de #include<>déclarations, commentaires, etc. que je dois inclure dans chaque nouveau fichier que je crée. J'ai ajouté

autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file) 

à mon vimrc, parce que j'ai entendu que cela crée un tampon avec le texte dont j'ai besoin. Comment puis-je ajouter ce texte à un nouveau fichier? Existe-t-il un moyen simple de le faire à partir du tampon ou existe-t-il un autre moyen simple de procéder? J'ai également entendu un peu parler des plugins de modèles. Y en a-t-il un très simple qui pourrait faire ça pour moi?

violoncelle électrique
la source
1
Avez-vous essayé de modifier un nouveau fichier C ++ après l'avoir ajouté autocmdet d'avoir créé le fichier squelette?
muru
1
J'ai essayé de créer un nouveau fichier avec une extension de fichier .cpp et de le modifier avec Vim. Lors de son ouverture pour le modifier, il était toujours vide. Y a-t-il une autre étape que je dois faire?
electriccello
2
Non, vous auriez dû voir le contenu du fichier squelette déjà inclus. Et si vous exécutez manuellement :r C:\(full file path of skeleton text file)? Avez-vous des erreurs?
muru
3
@electriccello Ah, :enewne fonctionnera pas, mais :e newfile.cppdevrait fonctionner s'il newfile.cppn'existait pas déjà (même s'il est vide).
muru
5
La raison pour laquelle cela :enewne fonctionnera pas est que vous modifiez un nouveau tampon sans nom, puis l' enregistrez en tant que fichier .cpp. BufNewFilene se déclenche que si vous modifiez un nouveau fichier avec le nom de fichier cible.
fruglemonkey

Réponses:

6

Le texte squelette d'un fichier existant peut être ajouté à un nouveau fichier en insérant la ligne

autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file)

dans le vimrc. L' BufNewFileévénement ne fonctionne pas si le nouveau fichier est créé en deux étapes à l'aide de :enewalors :sav filename. Au lieu de cela, la création d'un nouveau fichier à l'aide de :e filenamedéclenche la commande BufNewFileautomatique de l' événement dans le vimrc, en ajoutant le contenu du fichier texte squelette au fichier nouvellement créé.

violoncelle électrique
la source
1
Voir aussi :help template.
Martin Tournoij
Pour éviter que mon site .vimrcne soit encombré, y a-t-il un autre emplacement dans la ~/.vim/hiérarchie dans lequel je peux le placer?
Santosh Kumar
Cela ajoute également une ligne vierge supplémentaire en haut dans le nouveau fichier.
Santosh Kumar
5

En effet, les plugins d'extension de modèle vous aideront dans cette tâche. :readest l'étape 0 des plugins d'extension de modèle.

Par exemple, mu-template essaiera d'inclure foo.h de foo.cpp si foo.h est détecté. Cela permettra également d'étendre les en-têtes avec des données dynamiques (date, auteur, licence / copyright, etc.).

Luc Hermitte
la source
1

Pour configurer le squelette par défaut pour tous les types de fichiers et le personnaliser pour un projet spécifique:

function! s:load_skeleton(type)
  " do nothing if no filetype
  if empty(a:type) | return | endif

  " glob every directory of rtp to search for skeleton/filetype
  let skeletons = globpath(&rtp, 'skeleton/' . a:type, 0, 1)
  if empty(skeletons) | return | endif

  " read last skeleton into 1st line.
  exe '0read ' . skeletons[-1]
endfunction

augroup aug_skeleton
  au!

  " BufNewFile event is trigged when you edit a new file.
  autocmd BufNewFile * call s:load_skeleton(&filetype)
augroup end

Mettez les squelettes par défaut sous ~/.vim/skeleton, par exemple: ~/.vim/skeleton/vim, ~/.vim/skeleton/sh.

Mettez le squelette spécifique au projet sous balabala/project/.vim/skeleton. Tant qu'il ~/.vimapparaît avant balabala/project/.vimdans :h rtp, balabala/project/skeleton/sera utilisé comme répertoire squelette.

dedowsdi
la source