2015-11-02 22 views
5

我跟着本指南以不同的头模板自动插入到基于文件的扩展名不同类型的新文件,在一行中的新文件开始插入一个反斜杠:Vim的 - 如何使用自动命令和模板文件

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

它很好用!我有一个自定义的python源文件头文件,当我打开一个新的.py文件时它会自动插入。

我想要做类似的事情,这样,当我打开一个新的.tex文件中的基本的LaTeX模板插入...

除了我无法得到它的工作...

我的〜/ .vimrc这样说:

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

和我tex_template.txt这样说:

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

但是当我Ø笔这样一个新的文件:

vim test.tex 

(其中test.tex尚不存在)

我得到这个:

"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 

的问题似乎是与在开始反斜杠因为如果我从tex_template.txt中删除反斜线,新文件将打开,其中包含documentclass [a4paper,12pt] {article}。除了我需要反斜杠,否则它不是一个tex命令序列。

+0

如果你放两个反斜杠会发生什么? – 8bittree

+1

是的,对不起,我应该说。我已经尝试过了。它基本上是一样的,除了反斜线之一出现在错误信息中: E488:尾随字符::insert \ documentclass [a4paper,12pt] {article} –

回答

4

如果你看看:help :insert它这样说:

当心反斜杠开始的行,见 续行。

下面的链接line-continuation解释说,\是可以通过将C标志cpoptions覆盖一个连字符。

如果你改变你的模板如下它应该工作:

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

辉煌!作品一种享受。谢谢:)我认为这是这样的。我没有检查帮助文件,但找不到那一点。不错的一个马修斯特布里奇! –

1

你可能要考虑使用一个片段引擎像vim-snipmate(我的最爱)ultisnips。有了这些,你可以插入文本片段无处不在,而不仅仅是在文件的开头。

作为奖励,这些片段可以例如替代变量甚至运行命令。以下是我的片段(用于ultisnips)设置为产生TeX文件的头文件;

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 

这会自动填入文件名和上次修改文件的时间。它使用默认值填写我的姓名和电子邮件,但让我有机会覆盖它们。 fcdate函数是我写的一段Python代码,用于检索文件的出生时间。

我有hdr片段为几个不同的文件类型定义,而一个通用的片段用于所有其他文件。如果在行的开头输入hdr标签,则会展开相应的片段。