¿Cómo agrego texto esqueleto a los nuevos archivos vim?

9

Uso Vim para escribir C ++, y tengo bastantes #include<>declaraciones, comentarios, etc. que debo incluir en cada archivo nuevo que creo. he añadido

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

a mi vimrc, porque escuché que esto crea un búfer con el texto que necesito en él. ¿Cómo hago para agregar este texto a un nuevo archivo? ¿Hay una manera fácil de hacer esto desde el búfer, o hay otra manera fácil de hacerlo? También he escuchado un poco sobre los complementos de plantilla. ¿Hay alguna muy simple que pueda hacer esto por mí?

electriccello
fuente
1
¿Intentó editar un nuevo archivo C ++ después de agregar esto autocmdy crear el archivo esqueleto?
muru
1
Intenté crear un nuevo archivo con una extensión de archivo .cpp y editarlo con Vim. Al abrirlo para editarlo, todavía estaba en blanco. ¿Hay otro paso que deba hacer?
electriccello
2
No, debería haber visto el contenido del archivo esqueleto ya incluido. ¿Qué pasa si corres manualmente :r C:\(full file path of skeleton text file)? tuviste algun error?
Muru
3
@electriccello Ah, :enewno funcionará, pero :e newfile.cppdebería funcionar si newfile.cppaún no existiera (incluso si está vacío).
muru
55
La razón por la que :enewno funcionará es porque está editando un nuevo búfer sin nombre y luego guardándolo como un archivo .cpp. BufNewFilesolo se activa si está editando un nuevo archivo con el nombre de archivo de destino.
fruglemonkey

Respuestas:

6

El texto de esqueleto de un archivo existente se puede agregar a un nuevo archivo insertando la línea

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

en el vimrc. El BufNewFileevento no funciona si el nuevo archivo se crea en dos pasos usando :enewentonces :sav filename. En cambio, la creación de un nuevo archivo usando :e filenameactiva el BufNewFilecomando automático del evento en el vimrc, agregando el contenido del archivo de texto esqueleto al archivo recién creado.

electriccello
fuente
1
También vea :help template.
Martin Tournoij
Para evitar que me .vimrccongestionen, ¿hay alguna otra ubicación en la ~/.vim/jerarquía en la que pueda ubicarlo?
Santosh Kumar
Esto también agrega una línea en blanco adicional en la parte superior del nuevo archivo.
Santosh Kumar
5

De hecho, los complementos del expansor de plantillas lo ayudarán en esta tarea. :reades el paso 0 de los complementos del expansor de plantillas.

Por ejemplo, mu-template intentará incluir foo.h desde foo.cpp si se detecta foo.h. También permitirá expandir encabezados con datos dinámicos dentro de ellos (fecha, autor, licencia / copyright, etc.).

Luc Hermitte
fuente
1

Para configurar el esqueleto predeterminado para todos los tipos de archivo y personalizarlo para un proyecto específico:

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

Ponga esqueletos predeterminados debajo ~/.vim/skeleton, por ejemplo: ~/.vim/skeleton/vim, ~/.vim/skeleton/sh.

Ponga el esqueleto específico del proyecto debajo balabala/project/.vim/skeleton. Mientras ~/.vimaparezca antes balabala/project/.vimen :h rtp, balabala/project/skeleton/se utilizará como directorio de esqueleto.

dedowsdi
fuente