среда, 5 января 2011 г.

Vim: Параметры отступов и типы файлов

Разные типы файлов могут требовать разных настроек отступов. Например в YAML-файле для отступов используется пробелы, в Make-файле - табуляция, а в Python-файле - 4 пробела. Эти настройки можно устанавливать автоматически в зависимости от типа файлов.


Например, следующая команда установит для python-файлов добавляемые отступы в 4 пробела:

autocmd FileType python setlocal ts=4 sts=4 sw=4 et

Разберём выполняемую команду на составляющие. Эта команда состоит из двух частей:

autocmd FileType python

Первая часть команды устанавливает триггре на вы полнение второй части на определённое событие в Vim, в данном случае когда определился тип файла и это python-файл.

setlocal ts=4 sts=4 sw=4 et

Вторая часть команды, устанавливает локальные значения для текущего буфера или окна, tabstop=4, softtabstop=4, softwidth=4 и expandtab - указывает преобразовывать, при вставке, символы табуляции на пробелы, количество пробелов указано в tabstop(об отступах можно посмотреть в Vim: Табуляция и пробелы).

Команда autocmd выполнится если Vim скомпилирован с поддержкой autocmd. Узнать это можно выполнив команду :version. Включенные опции отображаются с символом +, отключенные с -.

Vim с поддержкой autocmd

Также должно быть включено определение типа файлов:

filetype on

Без него событие установленное в autocmd не сработает.

Проверить включена опция autocmd или нет можно при помощи условия:

if has("autocmd")
 ...
endif

Иногда Vim не правильно определяет тип файла или распознавание данного типа файлов не определено в filetype.vim. Привязать расширение данного файла к определённому типу можно так же через autocmd. Например у нас есть файл шаблон для cmf/cms с типом файла .tmpl и мы хотим, видеть его как html-файл:

autocmd BufNewFile,BufRead *.tmpl setfiletype html

Данная команда так же состоит из двух частей:

Первая часть autocmd BufNewFile,BufRead *.tmpl создаёт триггрер на два события. Первое, начало редактирования нового файла с расширением .tmpl или чтение файла из скелетон-файла. Второе, начало редактирования нового буфера, после чтения файла в него. Можно определить несколько типов файлов через запятую, например: *.tmpl, *.tpl.

Вторая часть команды setfiletype html устанавливает для данного файла тип html.

Узнать какой тип у открытого файла можно командой

:set filetype?
или
:set ft?

Можете добавить следующий фрагмент в свой .vimrc (_vimrc в win32) и отредактировать его под свои нужды:

if has("autocmd")
     "Включаем определение типов файлов
     filetype on
     autocmd FileType php setlocal ts=4 sts=4 sw=4 noet
     autocmd FileType python setlocal ts=4 sts=4 sw=4 et
     autocmd FileType javascript setlocal ts=4 sts=4 sw=4 noet

     autocmd FileType html setlocal ts=2 sts=2 sw=2 noet
     autocmd FileType xhtml setlocal ts=2 sts=2 sw=2 noet
     autocmd FileType xml setlocal ts=2 sts=2 sw=2 noet
     autocmd FileType css setlocal ts=2 sts=2 sw=2 noet

     autocmd FileType vim setlocal ts=4 sts=4 sw=4 noet
     autocmd FileType apache setlocal ts=2 sts=2 sw=2 noet
     autocmd FileType yaml setlocal ts=2 sts=2 sw=2 et

     autocmd BufNewFile,BufRead *.tmpl,*.tpl setfiletype html
endif

За основу взят скринкаст Whitespace preferences and filetypes

Похожие по тематике посты:

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