Как я могу изменить отступ по умолчанию в зависимости от типа файла?
34
Я хотел бы иметь разные отступы в зависимости от типа файла, над которым я работаю. Например, работая с .cфайлом, я хотел бы, чтобы отступы составляли 4 пробела. В .htmlфайлах, которые я хотел бы (должен) работать с вкладками.
Использование ftplugin предпочтительнее, чем использование автокоманд, поскольку Vim уже сам выполняет проверки типов файлов и уже пытается найти подходящий ftplugin, поэтому нет причин форсировать еще больше проверок и переопределять колесо.
-- редактировать --
Если у вас есть filetype plugin onв вашем vimrc- что вы должны - Vim будет пытаться обнаружить тип файла из файлов и редактирования, как только правильный тип файла будет найден и набор для буфера, попробуйте источник соответствующего ftplugin в этих стандартных местах:
Все это происходит автоматически, поэтому, если Vim распознает ваш тип файла, нет абсолютно никакой причины добавлять какую-либо логику определения типа файла: просто добавьте свои настройки в правильный ftplugin, и вы в порядке.
Нужно ли как-то активировать 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 файлов.
augroupпозволяет группировать связанные автокоманды в именованные группы. (См. Здесь, чтобы узнать о группах автокоманд.) Мы используем augroups для добавления автокоманд ~/.vimrcтаким образом, чтобы дубликаты не добавлялись при каждом их получении.
augroup vimrc
autocmd!
augroup END
autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4
filetype plugin indent on
в вашемvimrc
.filetype plugin on
задано, путь vim включает в себя файлыftplugin/<filetype>.vim
иafter/ftplugin/<filetype>/vim
.Вы можете сделать это с помощью автокоманд в вашем
.vimrc
.Например, у меня есть функция,
html_like_mode
которая настраивает различные вещи для редактирования файлов HTML. По моему у.vimrc
меня есть:Это ключи от расширения файла. Вы также можете отключить тип файла, если он включен:
Как вы можете видеть, вы можете сделать любую команду там. Таким образом, вы можете легко сделать
setlocal shiftwidth 4
для ваших * .c файлов.источник
augroup
позволяет группировать связанные автокоманды в именованные группы. (См. Здесь, чтобы узнать о группах автокоманд.) Мы используемaugroup
s для добавления автокоманд~/.vimrc
таким образом, чтобы дубликаты не добавлялись при каждом их получении.источник
Б autocmd и FileType
источник