2015-11-02 39 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標籤,則會展開相應的片段。