2015-11-02 9 views
5

Я последовал этому руководству, чтобы автоматически вставлять различные шаблоны заголовков в новые файлы разных типов на основе расширения файла:Vim - Как вставить обратную косую черту в начале строки в новом файле с использованием autocmd и файла шаблона

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

Он отлично работает! У меня есть собственный заголовок для исходных файлов python, который автоматически вставлен при открытии нового .py-файла.

Я хочу сделать нечто подобное, так что основной шаблон LaTeX вставляется, когда я открываю новый файл .tex ...

Только я не могу заставить его работать ...

Мой ~/.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вкладку в начале строки, соответствующий фрагмент расширяется.