2015-11-02 10 views
5

Ich folgte dieser Anleitung, um automatisch verschiedene Header-Vorlagen in neue Dateien unterschiedlicher Typen basierend auf der Dateierweiterung einzufügen:Vim - Wie man einen Backslash am Anfang einer Zeile in einer neuen Datei mit Hilfe von autocmd und einer Vorlagendatei einfügt

http://www.thegeekstuff.com/2008/12/vi-and-vim-autocommand-3-steps-to-add-custom-header-to-your-file/

Es funktioniert super! Ich habe einen benutzerdefinierten Header für Python-Quelldateien, der automatisch eingefügt wird, wenn ich eine neue .py-Datei öffne.

Ich mag eine ähnliche Sache zu tun, so dass eine grundlegende LaTeX-Vorlage eingefügt wird, wenn ich eine neue .tex-Datei öffnen ...

Außer, dass ich nicht die Arbeit kann ...

Mein ~/.vimrc sagt dieser:

autocmd bufnewfile *.tex so /home/steve/Work/tex_template.txt 

und meine tex_template.txt sagt dies:

:insert 
\documentclass[a4paper,12pt]{article} 
. 

aber wenn ich o Stift eine neue Datei wie folgt aus:

vim test.tex 

(wo test.tex nicht existiert bereits)

ich dieses:

"test.tex" [New File] 
Error detected while processing /home/steve/Work/tex_template.txt: 
line 2: 
E492: Not an editor command: :insertdocumentclass[a4paper,12pt]{article} 
Press ENTER or type command to continue 

Das Problem mit dem umgekehrten Schrägstrich am Anfang zu sein scheint der Zeile, denn wenn ich den Backslash von tex_template.txt lösche, öffnet sich die neue Datei mit der Dokumentklasse [a4paper, 12pt] {article} darin. Außer ich brauche den Backslash, weil es sonst keine Tex-Befehlsfolge ist.

+0

Was passiert, wenn Sie zwei Backslashes setzen? – 8bittree

+1

Ja, Entschuldigung, hätte ich sagen sollen. Das habe ich schon probiert. Es ist im Grunde das gleiche, außer dass einer der umgekehrten Schrägstriche in der Fehlermeldung angezeigt wird: E488: Nachgestellte Zeichen:: einfügen \ documentclass [a4paper, 12pt] {article} –

Antwort

4

Wenn man sich :help :insert sehen es sagt dies:

für Linien Watch out mit einem Backslash beginnen, siehe Zeilenfortsetzungs.

Nach dem Link zu line-continuation erklärt, dass die \ ein Fortsetzungszeichen ist, das durch Hindurchleiten des C Flag cpoptions außer Kraft gesetzt werden kann.

Es sollte funktionieren, wenn Sie Ihre Vorlage wie folgt ändern:

:set cpo+=C 
:insert 
\documentclass[a4paper,12pt]{article} 
. 
:set cpo-=C 
+0

Brilliant! Funktioniert gut. Danke :) Ich dachte, es ist so etwas. Ich habe die Hilfedateien überprüft, konnte dieses Bit jedoch nicht finden. Netter Matthew Strawbridge! –

1

Sie könnten mit einem Schnipsel Engine wie vim-snipmate oder (mein Favorit) ultisnips zu betrachten. Mit diesen können Sie Textausschnitte einfügen überall, nicht nur am Anfang einer Datei.

Als Bonus können diese Schnipsel z. Ersetzen Sie Variablen und sogar Laufbefehle. Der folgende Code ist mein Snippet (für Ultisnips), um den Header für eine TeX-Datei zu erzeugen;

snippet hdr "File header for LaTeX" b 
% file: `!v expand('%:t')` 
% vim:fileencoding=utf-8:ft=tex 
% 
% Copyright © `!v strftime("%Y")` ${1:R.F. Smith} ${2:<[email protected]>}. All rights reserved. 
% Created: `!p snip.rv = fcdate(path)` 
% Last modified: `!v strftime("%F %T %z")` 

$0 
endsnippet 

Dies wird automatisch den Dateinamen und den Zeitpunkt der letzten Änderung der Datei eingeben. Es füllt meinen Namen und meine E-Mail mit Standardwerten aus, gibt mir aber die Möglichkeit, sie zu überschreiben. Die fcdate-Funktion ist ein Stück Python-Code, den ich schrieb, um die Geburtszeit einer Datei abzurufen.

Ich habe die hdr Schnipsel für mehrere verschiedene Dateitypen definiert, und eine allgemeine, die für alle anderen Dateien verwendet wird. Wenn ich hdrTab am Anfang einer Zeile eingeben, wird das entsprechende Snippet erweitert.