Vim-如何使用autocmd和模板文件在新文件的行开头插入反斜杠

Vim-如何使用autocmd和模板文件在新文件的行开头插入反斜杠,vim,latex,tex,autocmd,Vim,Latex,Tex,Autocmd,我遵循此指南,根据文件扩展名自动将不同的头模板插入到不同类型的新文件中: 它工作得很好!我有一个python源文件的自定义头,当我打开一个新的.py文件时,它会自动插入 我想做一个类似的事情,以便在打开一个新的.tex文件时插入一个基本的LaTeX模板 除了我不能让它工作 我的~/.vimrc说: autocmd bufnewfile *.tex so /home/steve/Work/tex_template.txt :insert \documentclass[a4paper,12pt]

我遵循此指南,根据文件扩展名自动将不同的头模板插入到不同类型的新文件中:

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

我想做一个类似的事情,以便在打开一个新的.tex文件时插入一个基本的LaTeX模板

除了我不能让它工作

我的~/.vimrc说:

autocmd bufnewfile *.tex so /home/steve/Work/tex_template.txt
:insert
\documentclass[a4paper,12pt]{article}
.
我的tex_template.txt说:

autocmd bufnewfile *.tex so /home/steve/Work/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命令序列。

如果您查看
:help:insert
,它会说:

autocmd bufnewfile *.tex so /home/steve/Work/tex_template.txt
:insert
\documentclass[a4paper,12pt]{article}
.
注意以反斜杠开头的行,请参见 行继续

在链接到
行延续
之后,说明
\
是一个延续字符,可以通过将
C
标志传递到
cpoptions
来覆盖该字符

如果您按以下方式更改模板,它应该可以工作:

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

<>你可能想考虑使用一个片段引擎,比如(或我最喜欢的)。使用这些工具,您可以在任何地方插入文本片段,而不仅仅是在文件的开头

作为奖励,这些代码片段可以替代变量,甚至可以运行命令。下面是我的代码片段(用于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:<my@email>}. All rights reserved.
% Created: `!p snip.rv = fcdate(path)`
% Last modified: `!v strftime("%F %T %z")`

$0
endsnippet
片段hdr“LaTeX的文件头”b
%档案:`!v扩展('%:t')`
%vim:fileencoding=utf-8:ft=tex
%
%版权所有©版权所有!v strftime(“%Y”)`${1:R.F.Smith}${2:}。版权所有。
%创建:`!p snip.rv=fcdate(路径)`
%上次修改:`!v strftime(“%F%T%z”)`
$0
尾端片段
这将自动填写文件名和上次修改文件的时间。它用默认值填充我的姓名和电子邮件,但让我有机会覆盖它们。
fcdate
函数是我编写的一段Python代码,用于检索文件的出生时间


我为几种不同的文件类型定义了
hdr
代码段,还有一个用于所有其他文件的通用代码段。如果我在行首键入
hdr
tab,则相应的代码段将展开。

如果你加了两个反斜杠,会发生什么情况?是的,对不起,我应该这么说。我已经试过了。它基本上是相同的,除了一个反斜杠出现在错误消息中:E488:Trailing characters::insert\documentclass[a4paper,12pt]{article}Brilliant!工作是一种享受。谢谢:)我以为是这样的。我确实检查了帮助文件,但找不到那一点。很好,马修·斯特劳布里奇!