Como adicionar texto esqueleto a novos arquivos vim?

9

Eu uso o Vim para escrever C ++ e tenho algumas #include<>instruções, comentários etc. que devo incluir em cada novo arquivo que eu criar. eu já adicionei

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

ao meu vimrc, porque ouvi dizer que isso cria um buffer com o texto que preciso nele. Como faço para adicionar este texto a um novo arquivo? Existe uma maneira fácil de fazer isso no buffer ou existe outra maneira fácil de fazer isso? Eu também ouvi um pouco sobre plugins de modelo. Existe uma muito simples que poderia fazer isso por mim?

violoncelo
fonte
11
Você tentou editar um novo arquivo C ++ depois de adicioná-lo autocmde criar o arquivo esqueleto?
muru
11
Tentei criar um novo arquivo com uma extensão de arquivo .cpp e editá-lo com o Vim. Ao abri-lo para edição, ele ainda estava em branco. Existe outra etapa que preciso fazer?
Electriccello
2
Não, você já deve ter visto o conteúdo do arquivo de esqueleto. E se você executar manualmente :r C:\(full file path of skeleton text file)? Você recebe algum erro?
muru
3
@electriccello Ah, :enewnão vai funcionar, mas :e newfile.cppdeve funcionar se newfile.cppainda não existir (mesmo que vazio).
muru
5
A razão :enewnão vai funcionar é porque você está editando um novo buffer, sem nome, e , em seguida, salvá-lo como um arquivo .cpp. BufNewFilesó é acionado se você estiver editando um novo arquivo com o nome do arquivo de destino.
Fruglemonkey #

Respostas:

6

O esqueleto de um arquivo existente pode ser adicionado a um novo arquivo, inserindo a linha

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

no vimrc. O BufNewFileevento não funcionará se o novo arquivo for criado em duas etapas usando :enewentão :sav filename. Em vez disso, criar um novo arquivo usando :e filenameaciona o BufNewFileautocommand do evento no vimrc, adicionando o conteúdo do arquivo de texto do esqueleto ao arquivo recém-criado.

violoncelo
fonte
11
Veja também :help template.
Martin Tournoij 23/08/19
Para impedir que eu .vimrcfique congestionado, existe algum outro local na ~/.vim/hierarquia em que eu possa colocá-lo?
Santosh Kumar
Isso também adiciona uma linha em branco adicional na parte superior do novo arquivo.
Santosh Kumar
5

De fato, os plugins do expansor de modelos o ajudarão nessa tarefa. :readé a etapa 0 dos plug-ins de expansão de modelo.

Por exemplo, o mu-template tentará incluir foo.h de foo.cpp se foo.h for detectado. Também permitirá expandir cabeçalhos com dados dinâmicos dentro deles (data, autor, licença / copyright, etc.).

Luc Hermitte
fonte
1

Para configurar o esqueleto padrão para todos os tipos de arquivos e personalizá-lo para um projeto 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

Coloque os esqueletos padrão em ~/.vim/skeleton, por exemplo: ~/.vim/skeleton/vim, ~/.vim/skeleton/sh.

Coloque o esqueleto específico do projeto em balabala/project/.vim/skeleton. Desde que ~/.vimapareça antes balabala/project/.vimem :h rtp, balabala/project/skeleton/será usado como diretório de esqueleto.

dedowsdi
fonte