Wie füge ich neuen VIM-Dateien Skeletttext hinzu?

9

Ich verwende Vim zum Schreiben von C ++ und habe einige #include<>Anweisungen, Kommentare usw., die ich in jede neue Datei aufnehmen muss, die ich erstelle. Ich habe hinzugefügt

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

zu meinem vimrc, weil ich gehört habe, dass dies einen Puffer mit dem Text erstellt, den ich darin benötige. Wie füge ich diesen Text einer neuen Datei hinzu? Gibt es eine einfache Möglichkeit, dies aus dem Puffer heraus zu tun, oder gibt es eine andere einfache Möglichkeit, dies zu tun? Ich habe auch ein wenig über Template-Plugins gehört. Gibt es eine sehr einfache, die dies für mich tun könnte?

Elektrocello
quelle
1
Haben Sie versucht, eine neue C ++ - Datei zu bearbeiten, nachdem Sie diese hinzugefügt autocmdund die Skelettdatei erstellt haben?
Muru
1
Ich habe versucht, eine neue Datei mit der Dateierweiterung .cpp zu erstellen und mit Vim zu bearbeiten. Beim Öffnen zum Bearbeiten war es noch leer. Muss ich noch einen weiteren Schritt tun?
electriccello
2
Nein, Sie sollten den Inhalt der bereits enthaltenen Skelettdatei gesehen haben. Was ist, wenn Sie manuell ausführen :r C:\(full file path of skeleton text file)? Bekommst du irgendwelche Fehler?
Muru
3
@electriccello Ah, :enewfunktioniert nicht, :e newfile.cppsollte aber funktionieren, wenn es newfile.cppnoch nicht existiert (auch wenn es leer ist).
Muru
5
Der Grund, warum dies :enewnicht funktioniert, ist, dass Sie einen neuen, unbenannten Puffer bearbeiten und ihn dann als CPP-Datei speichern. BufNewFileWird nur ausgelöst, wenn Sie eine neue Datei mit dem Zieldateinamen bearbeiten.
Fruglemonkey

Antworten:

6

Skeletttext aus einer vorhandenen Datei kann durch Einfügen der Zeile zu einer neuen Datei hinzugefügt werden

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

in die vimrc. Das BufNewFileEreignis funktioniert nicht, wenn die neue Datei in zwei Schritten mit :enewthen erstellt wird :sav filename. Stattdessen :e filenamelöst das Erstellen einer neuen Datei mit BufNewFileden automatischen Befehl des Ereignisses im vimrc aus und fügt den Inhalt der Skeletttextdatei zur neu erstellten Datei hinzu.

Elektrocello
quelle
1
Siehe auch :help template.
Martin Tournoij
.vimrcGibt es einen anderen Ort in der ~/.vim/Hierarchie, an dem ich ihn ablegen kann, um zu verhindern, dass ich überlastet werde ?
Santosh Kumar
Dadurch wird oben in der neuen Datei eine zusätzliche leere Zeile hinzugefügt.
Santosh Kumar
5

In der Tat helfen Ihnen Template Expander-Plugins bei dieser Aufgabe. :readist der Schritt 0 der Template Expander Plugins.

Beispielsweise versucht mu-template , foo.h aus foo.cpp einzuschließen, wenn foo.h erkannt wird. Außerdem können Header mit dynamischen Daten (Datum, Autor, Lizenz / Urheberrecht usw.) erweitert werden.

Luc Hermitte
quelle
1

So richten Sie das Standardgerüst für alle Dateitypen ein und passen es für ein bestimmtes Projekt an:

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

Legen Sie Standard Skelette unter ~/.vim/skeleton, zum Beispiel: ~/.vim/skeleton/vim, ~/.vim/skeleton/sh.

Legen Sie das projektspezifische Skelett unter balabala/project/.vim/skeleton. Solange ~/.vimerscheint vor balabala/project/.vimin :h rtp, balabala/project/skeleton/wird als Skelett - Verzeichnis verwendet werden.

dedowsdi
quelle