2008-10-02 21 views
33

Al crear un nuevo archivo con vim, me gustaría agregar automáticamente algún código esqueleto.¿Cómo puedo agregar automáticamente algún código de esqueleto al crear un nuevo archivo con vim

Por ejemplo, cuando se crea un nuevo archivo XML, me gustaría añadir la primera línea:

<?xml version="1.0"?> 

o al crear un archivo html, me gustaría añadir:

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

Respuesta

5

Si desea adaptar su esqueleto al contexto, o para las elecciones del usuario, echar un vistazo a los plugins plantilla-expansor que aparecen en vim.wikia

1

Aquí hay dos ejemplos usando python scripting.

añadir algo como esto en su .vimrc u otro archivo de origen por su .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

Se pueden añadir varios ganchos cuando los archivos se leen o se crean. a

:help event 

y lea lo que hay allí. Lo que queremos es

:help BufNewFile 
28

Tengo algo como esto en mi .vimrc:

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

Y así sucesivamente, lo que necesita.

15

Puede guardar su esqueleto/plantilla a un archivo, por ejemplo ~/vim/skeleton.xml

A continuación, añada lo siguiente a su .vimrc

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

¿Cuál es el significado de '0r' aquí? – crisron

+1

@crisis sobre el significado de 0r. 0 coloca la inserción en la línea cero y la r indica a vim que lea el contenido del archivo en la ubicación de inserción. – erichui

+0

Gracias por la explicación. – crisron

7

lo siento por la tardanza, pero siento la forma I do it podría ser útil para algunos. Utiliza el tipo de archivo del archivo, lo que lo hace más corto y más dinámico que los métodos más convencionales. Fue probado solo en 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

Su enlace está roto –

+0

@orftz - Acabo de reemplazar la configuración que he estado utilizando durante mucho tiempo con su método de tipo de archivo.Mucho más limpio. Me pareció útil enumerar cuáles eran los tipos de archivos después de esto. En vim si ejecuta ': echo glob ($ VIMRUNTIME. '/ Ftplugin/*. Vim')' o ': echo glob ($ VIMRUNTIME. '/ Syntax/*. Vim')' listará todos los tipos vim sabe acerca de –

0

Puede trabajar con snipmate también:

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

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

con "docs" el fragmento para disparar.

Funciona con varios fragmentos, pero luego aparece la ventana: mensajes y es engorroso.

Cuestiones relacionadas