Jak dodać tekst szkieletu do nowych plików vim?

9

Używam Vima do pisania C ++ i mam sporo #include<>instrukcji, komentarzy itp., Które muszę dołączyć do każdego nowego pliku, który tworzę. dodałem

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

do mojego vimrc, ponieważ słyszałem, że tworzy bufor z tekstem, którego potrzebuję. Jak mogę dodać ten tekst do nowego pliku? Czy istnieje prosty sposób na zrobienie tego z bufora, czy jest inny prosty sposób na zrobienie tego? Słyszałem też trochę o wtyczkach szablonów. Czy istnieje bardzo prosty, który mógłby to dla mnie zrobić?

wiolonczela elektryczna
źródło
1
Czy próbowałeś edytować nowy plik C ++ po dodaniu go autocmdi utworzeniu pliku szkieletu?
muru
1
Próbowałem utworzyć nowy plik z rozszerzeniem .cpp i edytować go za pomocą Vima. Po otwarciu do edycji nadal było puste. Czy muszę wykonać kolejny krok?
elektryczna
2
Nie, powinieneś był już zobaczyć zawartość pliku szkieletu. Co jeśli uruchomisz ręcznie :r C:\(full file path of skeleton text file)? Czy otrzymujesz jakieś błędy?
muru
3
@electriccello Ah, :enewnie będzie działać, ale :e newfile.cpppowinno działać, jeśli newfile.cppjeszcze nie istniało (nawet jeśli jest puste).
muru
5
Powodem, dla którego :enewnie będzie działać, jest to, że edytujesz nowy, nienazwany bufor, a następnie zapisujesz go jako plik .cpp. BufNewFileuruchamia się tylko wtedy, gdy edytujesz nowy plik z docelową nazwą pliku.
fruglemonkey

Odpowiedzi:

6

Tekst szkieletu z istniejącego pliku można dodać do nowego pliku, wstawiając linię

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

do vimrc. BufNewFileZdarzenie nie działa, gdy tworzony jest nowy plik w dwóch etapach stosując :enewpotem :sav filename. Zamiast tego utworzenie nowego pliku za pomocą :e filenamewyzwala automatyczne polecenie BufNewFilezdarzenia w vimrc, dodając zawartość szkieletowego pliku tekstowego do nowo utworzonego pliku.

wiolonczela elektryczna
źródło
1
Zobacz także :help template.
Martin Tournoij,
Czy aby zapobiec .vimrczatłoczeniu, czy jest jakaś inna lokalizacja w ~/.vim/hierarchii, w której mogę ją umieścić?
Santosh Kumar
Dodaje to również dodatkową pustą linię u góry w nowym pliku.
Santosh Kumar
5

Rzeczywiście, wtyczki ekspandera szablonów pomogą ci w tym zadaniu. :readjest krokiem 0 wtyczek ekspandera szablonów.

Na przykład szablon mu będzie próbował dołączyć foo.h z foo.cpp, jeśli zostanie wykryty foo.h. Pozwoli to również na rozszerzenie nagłówków zawierających dynamiczne dane (data, autor, licencja / prawa autorskie itp.).

Luc Hermitte
źródło
1

Aby ustawić domyślny szkielet dla wszystkich typów plików i dostosować go do konkretnego projektu:

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

Umieść domyślne szkielety pod ~/.vim/skeleton, np .: ~/.vim/skeleton/vim, ~/.vim/skeleton/sh.

Umieść szkielet projektu balabala/project/.vim/skeleton. Tak długo, jak ~/.vimpojawia się przed balabala/project/.vimin :h rtp, balabala/project/skeleton/będzie używany jako katalog szkieletowy.

dedowsdi
źródło