Come faccio ad aggiungere testo scheletro a nuovi file vim?


9

Uso Vim per scrivere C ++ e ho alcune #include<>affermazioni, commenti, ecc. Che devo includere in ogni nuovo file che creo. ho aggiunto

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

al mio vimrc, perché ho sentito che questo crea un buffer con il testo di cui ho bisogno. Come faccio ad aggiungere questo testo a un nuovo file? C'è un modo semplice per farlo dal buffer o c'è un altro modo semplice per farlo? Ho anche sentito parlare un po 'di plugin template. Ce n'è uno molto semplice che potrebbe fare questo per me?


1
Hai provato a modificare un nuovo file C ++ dopo averlo aggiunto autocmde aver creato il file skeleton?
muru,

1
Ho provato a creare un nuovo file con estensione .cpp e modificarlo con Vim. All'apertura per la modifica, era ancora vuoto c'è un altro passo che devo fare?
electriccello

2
No, avresti dovuto vedere i contenuti del file scheletro già inclusi. Cosa succede se si esegue manualmente :r C:\(full file path of skeleton text file)? Ricevi degli errori?
Muru,

3
@electriccello Ah, :enewnon funzionerà, ma :e newfile.cppdovrebbe funzionare se newfile.cppnon esistesse già (anche se vuoto).
Muru,

5
Il motivo per cui :enewnon funzionerà è perché stai modificando un nuovo buffer senza nome e quindi salvandolo come file .cpp. BufNewFilesi attiva solo se stai modificando un nuovo file con il nome file di destinazione.
fruglemonkey,

Risposte:


6

Il testo scheletro di un file esistente può essere aggiunto a un nuovo file inserendo la riga

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

nel vimrc. L' BufNewFileevento non funziona se il nuovo file viene creato in due passaggi utilizzando :enewallora :sav filename. Invece, la creazione di un nuovo file tramite :e filenameattiva il BufNewFilecomando automatico dell'evento nel vimrc, aggiungendo il contenuto del file di testo scheletro al file appena creato.



Per evitare che io .vimrcsia congestionato, c'è qualche altro posto nella ~/.vim/gerarchia in cui posso inserirlo?
Santosh Kumar,

Ciò aggiunge anche una riga vuota aggiuntiva nella parte superiore del nuovo file.
Santosh Kumar,

5

Infatti, i plug-in di espansione modello ti aiuteranno in questa attività. :readè il passaggio 0 dei plug-in di espansione modello.

Ad esempio, mu-template tenterà di includere foo.h da foo.cpp se viene rilevato foo.h. Permetterà inoltre di espandere le intestazioni con dati dinamici al loro interno (data, autore, licenza / copyright, ecc.).


1

Per impostare lo scheletro predefinito per tutti i tipi di file e personalizzarlo per un progetto specifico:

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

Mettere scheletri di default sotto ~/.vim/skeleton, ad esempio: ~/.vim/skeleton/vim, ~/.vim/skeleton/sh.

Metti sotto lo scheletro specifico del progetto balabala/project/.vim/skeleton. Finché ~/.vimappare prima balabala/project/.vimin :h rtp, balabala/project/skeleton/verrà utilizzato come directory scheletro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.