Как я могу изменить отступ по умолчанию в зависимости от типа файла?

34

Я хотел бы иметь разные отступы в зависимости от типа файла, над которым я работаю. Например, работая с .cфайлом, я хотел бы, чтобы отступы составляли 4 пробела. В .htmlфайлах, которые я хотел бы (должен) работать с вкладками.

Как мне этого добиться?

DeltaLima
источник

Ответы:

25

Лучший способ - вставить эти настройки ~/.vim/after/ftplugin/<filetype>.vim.

Для HTML (при условии, что вы хотите 4-символьные вкладки):

~/.vim/after/ftplugin/html.vim

setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab

Использование ftplugin предпочтительнее, чем использование автокоманд, поскольку Vim уже сам выполняет проверки типов файлов и уже пытается найти подходящий ftplugin, поэтому нет причин форсировать еще больше проверок и переопределять колесо.

-- редактировать --

Если у вас есть filetype plugin onв вашем vimrc- что вы должны - Vim будет пытаться обнаружить тип файла из файлов и редактирования, как только правильный тип файла будет найден и набор для буфера, попробуйте источник соответствующего ftplugin в этих стандартных местах:

$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim

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

romainl
источник
Нужно ли как-то активировать ftplugin, или создание файла (ов) активирует его автоматически?
DeltaLima
Убедитесь , что у вас есть filetype plugin indent onв вашем vimrc.
romainl
1
@DeltaLima vim имеет путь, по которому он проходит, чтобы проверить настройки. Пока filetype plugin onзадано, путь vim включает в себя файлы ftplugin/<filetype>.vimи after/ftplugin/<filetype>/vim.
Давидловрыдуда
@ DeltaLima, пожалуйста, смотрите мои изменения.
romainl
14

Вы можете сделать это с помощью автокоманд в вашем .vimrc.

Например, у меня есть функция, html_like_modeкоторая настраивает различные вещи для редактирования файлов HTML. По моему у .vimrcменя есть:

au BufNewFile,BufRead *.html call s:html_like_mode()

Это ключи от расширения файла. Вы также можете отключить тип файла, если он включен:

au FileType perl setlocal equalprg=perltidy

Как вы можете видеть, вы можете сделать любую команду там. Таким образом, вы можете легко сделать setlocal shiftwidth 4для ваших * .c файлов.

derobert
источник
9

augroupпозволяет группировать связанные автокоманды в именованные группы. (См. Здесь, чтобы узнать о группах автокоманд.) Мы используем augroups для добавления автокоманд ~/.vimrcтаким образом, чтобы дубликаты не добавлялись при каждом их получении.

augroup vimrc
  autocmd!
augroup END

autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4
shawndumas
источник
2
Было бы полезно, если бы вы объяснили, что это делает и как его настроить, не все узнают;)
Сет,
3

Б autocmd и FileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4
Avelino
источник