2008-10-02 7 views
33

Wenn ich eine neue Datei mit vim erstelle, möchte ich automatisch etwas Skelett-Code hinzufügen.Wie kann ich beim Erstellen einer neuen Datei mit vim automatisch einen Skeleton-Code hinzufügen?

Zum Beispiel, wenn Sie eine neue XML-Datei zu erstellen, würde ich gerne die erste Zeile hinzufügen:

<?xml version="1.0"?> 

Oder wenn eine HTML-Datei zu erstellen, würde ich hinzufügen:

<!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> 

Antwort

5

speichern Wenn Sie Ihr Skelett anpassen möchten auf den Kontext oder die Benutzerauswahl haben einen Blick auf dem auf vim.wikia aufgeführten plugins Template-Expander

1

Hier sind zwei Beispiele, die Python Scripting verwenden.

so etwas in Ihrem .vimrc oder eine andere Datei hinzufügen, indem Sie Ihre .vimrc gelesen:

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

Sie können verschiedene Haken hinzufügen, wenn Dateien gelesen oder erstellt. zu

und lesen, was dort ist. Was Sie wollen, ist

:help BufNewFile 
28

ich so etwas in meinem .vimrc bekam:

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

Und so weiter, was Sie benötigen.

15

Sie können Ihr Skelett/Vorlage in eine Datei, zum Beispiel ~/vim/skeleton.xml

Dann fügen Sie den folgenden Code zu Ihrem .vimrc

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

Was ist die Bedeutung von 'hier 0r'? – crisron

+1

@crison auf die Bedeutung von 0r. 0 positioniert die Einfügung in Zeile Null, und r weist vim an, den Inhalt der Datei am Einfügeort einzulesen. – erichui

+0

Danke für die Erklärung. – crisron

7

Sorry für die Verspätung, aber ich fühle mich den Weg I do it könnte einig nützlich sein. Es verwendet den Dateityp der Datei, wodurch sie kürzer und dynamischer als herkömmliche Methoden wird. Es wurde nur auf Vim 7.3 getestet.

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

Ihr Link ist kaputt –

+0

@orftz - Ich habe gerade die Config ersetzt, die ich schon lange mit Ihrer Dateityp-Methode verwendet habe.Viel sauberer. Fand es nützlich, die Dateitypen danach aufzulisten. Wenn Sie in vim Folgendes ausführen: 'echo glob ($ VIMRUNTIME. '/ Ftplugin/*. Vim')' oder ': echo glob ($ VIMRUNTIME. '/ Syntax/*. Vim')' listet alle Typen vim auf weiß darüber Bescheid. –

0

Es kann auch mit snipmate arbeiten:

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

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

mit "docs" das Snippet zu triggern.

Es funktioniert mit Multi-Snippets, aber dann erscheint das: Nachrichtenfenster und es ist umständlich.

Verwandte Themen