2008-10-02 6 views
33

Lors de la création d'un nouveau fichier avec vim, je voudrais ajouter automatiquement un code squelette.Comment ajouter automatiquement un code squelette lors de la création d'un nouveau fichier avec vim

Par exemple, lors de la création d'un nouveau fichier xml, je voudrais ajouter la première ligne:

<?xml version="1.0"?> 

Ou lors de la création d'un fichier html, je voudrais ajouter:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <head> 
    <title></title> 
    </head> 
    <body> 
    </body> 
</html> 

Répondre

5

Si vous voulez adapter votre squelette Pour le contexte, ou pour les choix des utilisateurs, jetez un oeil sur les plugins template-expander listés sur vim.wikia

1

Voici deux exemples utilisant le script python.

Ajouter quelque chose comme ça dans votre .vimrc ou un autre fichier source par votre .vimrc:

augroup Xml 
    au BufNewFile *.xml :python import vim 
    au BufNewFile *.xml :python vim.current.buffer[0:0] = ['<?xml version="1.0"?>'] 
    au BufNewFile *.xml :python del vim 
augroup END 

fu s:InsertHtmlSkeleton() 
    python import vim 
    python vim.current.buffer[0:0] = ['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">', "<html>", "<head>", " <title></title>", "</head>", "<body>", "", "</body>", "</html>"] 
    python del vim 
endfu 

augroup Html 
    au BufNewFile *.html call <SID>InsertHtmlSkeleton() 
augroup END 
1

Vous pouvez ajouter divers crochets lorsque les fichiers sont lus ou créés. à

:help event 

et lisez ce qu'il y a. Ce que vous voulez est

:help BufNewFile 
28

Je suis quelque chose comme ça dans mon .vimrc:

au BufNewFile *.xml 0r ~/.vim/xml.skel | let IndentStyle = "xml" 
au BufNewFile *.html 0r ~/.vim/html.skel | let IndentStyle = "html" 

Et ainsi de suite, tout ce que vous aurez besoin.

15

Vous pouvez enregistrer votre squelette/modèle à un fichier, par exemple ~/vim/skeleton.xml

Ensuite, ajoutez ce qui suit à votre .vimrc

augroup Xml 
    au BufNewFile *.xml 0r ~/vim/skeleton.xml 
augroup end 
+0

Quelle est la signification de '0r' ici? – crisron

+1

@crison sur la signification de 0r. 0 positionne l'insertion sur la ligne zéro et la commande r indique à vim de lire le contenu du fichier à l'emplacement d'insertion. – erichui

+0

Merci pour l'explication. – crisron

7

Désolé pour le retard, mais je pense que la façon dont I do it pourrait être utile à certains. Il utilise le type de fichier, ce qui le rend plus court et plus dynamique que les méthodes plus conventionnelles. Il a été testé uniquement sur Vim 7.3.

if has("win32") || has ('win64') 
    let $VIMHOME = $HOME."/vimfiles/" 
else 
    let $VIMHOME = $HOME."/.vim/" 
endif 

" add templates in templates/ using filetype as file name 
au BufNewFile * :silent! exec ":0r ".$VIMHOME."templates/".&ft 
+1

Votre lien est cassé –

+0

@orftz - Je viens de remplacer la config que j'utilise depuis longtemps avec votre méthode filetype.Beaucoup plus propre. J'ai trouvé utile de lister ce que les types de fichiers étaient après cela. Dans vim si vous exécutez ': echo glob ($ VIMRUNTIME. '/ Ftplugin/*. Vim')' ou ': echo glob ($ VIMRUNTIME. '/ Syntax/* .vim')' il listera tous les types vim sait à propos de. –

0

Il peut fonctionner avec snipmate aussi:

augroup documentation 
    au! 
    au BufNewFile *.py :call ExecuteSnippet('docs') 
augroup END 

function! ExecuteSnippet(name) 
    execute "normal! i" . a:name . "\<c-r>=TriggerSnippet()\<cr>" 
endfunction 

avec "docs" l'extrait de code pour déclencher.

Il fonctionne avec des extraits multiples, mais la fenêtre: messages apparaît et elle est lourde.

Questions connexes