Linux и Windows: помощь админам и пользователям

Администрируем и настраиваем Windows, Linux.



Автокоманды в Vi и Vim: автоматически добавляем в файл заголовок

Рубрика: Редакторы
Метки: | | |
Вторник, 31 марта 2009 г.
Просмотров: 9228
Подписаться на комментарии по RSS


Используя возмжность автоматического выполнения команд в Vi / Vim, вы можете указать определенные какие команды Vim будет выполнять автоматически в случае если произошло нужное событие: создан файл с определенным расширением, файл открыт или закрыт, и многое другое.

В данной статье, всего в три шага, мы используем функцию автокоманды для создания заголовка файла с именем файла, датой создания, датой последней модификации.

Синтаксис autocmd :

autocmd  {event} {pattern} {cmd}

Events: Существует более 40 различных событий. Подробнее о них читайте в :help, здесь приведены просто некоторые примеры:

BufNewFile	
FileReadPre
BufWritePre	
FileWritePre	
BufDelete	
BufWipeout	
BufNew	
BufEnter	
BufLeave

В данной статье мы рассматриваем такой пример: допустим вы программист на С и хотели бы, чтобы при создании файл с расширением .с автоматически в начало файла добавлялся заголовок с автором, именем файла и проче. Вы легко сделаете это, дочитав статью до конца. В конце мы получим следующий заголовок:

/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
* File Name : 1.c
* Purpose :
* Creation Date : 22-12-2008
* Last Modified : Mon 22 Dec 2008 10:36:49 PM PST
* Created By :  
_._._._._._._._._._._._._._._._._._._._._.*/

Шаг 1: Создаем файл шаблона

Сохраните шаблон, выложенный ниже в текстовый файл c_header.txt. Обратите внимание, первой строкой идет ":insert", а в последней строке точка -  ".":

$ cat c_header.txt
:insert
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
* File Name :
* Purpose :
* Creation Date :
* Last Modified :
* Created By :  
_._._._._._._._._._._._._._._._._._._._._.*/
.

Шаг 2: Добавляем команды autocmd в ~/.vimrc

Добавьте следующие строки в файл ~/.vimrc. Пока оставим данные строки без пояснений и выясним их значение ниже в этой статье.

$ cat ~/.vimrc
autocmd bufnewfile *.c so /home/jsmith/c_header.txt
autocmd bufnewfile *.c exe "1," . 10 . "g/File Name :.*/s//File Name : " .expand("%")
autocmd bufnewfile *.c exe "1," . 10 . "g/Creation Date :.*/s//Creation Date : " .strftime("%d-%m-%Y")
autocmd Bufwritepre,filewritepre *.c execute "normal ma"
autocmd Bufwritepre,filewritepre *.c exe "1," . 10 . "g/Last Modified :.*/s/Last Modified :.*/Last Modified : " .strftime("%c")
autocmd bufwritepost,filewritepost *.c execute "normal `a"

Щаг 3: Создайте новый файл с расширением *.c

Теперь, если вы создаете новый файл с нужным расширением используя vim, в начало файла будет автоматически добавлен заголовок, определенный в шаге 1 и добавлены имя файла и дата создания.

$ vi myfile.c
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
* File Name : myfile.c
* Purpose :
* Creation Date : 20-12-2008
* Last Modified :
* Created By :
_._._._._._._._._._._._._._._._._._._._._.*/

После того как вы сохраните файл myfile.c, он будет автоматически обновлен в поле Last Modified.

$ vi myfile.c
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
* File Name : myfile.c
* Purpose :
* Creation Date : 20-12-2008
* Last Modified : Sat 20 Dec 2008 09:37:30 AM PST
* Created By :
_._._._._._._._._._._._._._._._._._._._._.*/

Пояснения по командам autocmd в  ~/.vimrc

$ cat -n ~/.vimrc
     1  autocmd bufnewfile *.c so /home/jsmith/c_header.txt
     2  autocmd bufnewfile *.c exe "1," . 10 . "g/File Name :.*/s//File Name : " .expand("%")
     3  autocmd bufnewfile *.c exe "1," . 10 . "g/Creation Date :.*/s//Creation Date : " .strftime("%d-%m-%Y")
     4  autocmd Bufwritepre,filewritepre *.c execute "normal ma"
     5  autocmd Bufwritepre,filewritepre *.c exe "1," . 10 . "g/Last Modified :.*/s/Last Modified :.*/Last Modified : " .strftime("%c")
     6  autocmd bufwritepost,filewritepost *.c execute "normal `a"
  • Строка 1 определяет где находиться файл шаблона. Она также указывает что данный шаблон используется для всех файлов с расширением *.c.
  • Строка 2 ищет шаблон “File Name :” с первой строки по десятую. Если находит, то дописывает текущее имя файла.
  • Строка 3 по аналогии с строкой 2 обновляет Creation Date.
  • Строка 5 обновляет поле Last Modified текущей датой и временем когда вы сохраняете файл.
  • Строки 4 & 6: когда вы сохраняете файл, курсор перемещается на поле “Last modified :” (потому что это последняя операция записи). Если вы хотите вернуть курсор назад на предыдущую позицию, вам необходимо добавить строки 4 и 6 в файл .vimrc.
  • Строка 4 отмечает позицию курсора перед сохранением файла.
  • Строка 6 возвращает позицию курсора на отмеченное в строке 4 место.

Полезные советы:

  • Проверьте включена ли функция autocmd в Vi / Vim - Выполните :version в vi / vim. Если функция autocommand включена, отобразится +autocmd.
  • Помощь по Autocommand - Выполните :help au из vi / vim.

 

Постовой

Делайте Бизнес с Орифлейм по новому. Теперь вы можете использовать все возможности интернета.

Лучшие шкафы купе на заказ в Москве. Купим продукцию в компании «АВ-Стиль» вы покупаете мебель от ведущих производителей по самым низким ценам.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Комментариев: 3

  1. Аноним | 2010-07-04 в 13:25:27

    Ещё бы узнать, как переместиться внутрь функции main после автоматической вставки её заготовки, было бы вообще хорошо.

  2. При попытке применить настройки получаю вот такую ошибку:

    # source !$

    source ../.vimrc

    autocmd: команда не найдена

    bash: ../.vimrc: строка 2: ошибка синтаксиса около неожиданной лексемы `('

    bash: ../.vimrc: строка 2: `autocmd bufnewfile *.py exe "1," . 10 . "g/File Name :.*/s//File Name : " .expand("%")'

    Подскажите, в чем проблема?

  3. Спасибо! Всё работает. Единственная проблема: "с первой строки по десятую". Если в файле меньше 10 строк, то выдаётся ошибка "E16: Недопустимый диапазон" (например, это актуально для нового файла). Я решил проблему, добавив вместо 10 число строк заголовка (у меня это 7). Возможно, можно это как-то автоматизировать, но пока мне не требуется.

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)