Ответы:
Лучший способ - вставить эти настройки ~/.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, и вы в порядке.
filetype plugin indent on
в вашем vimrc
.
filetype plugin on
задано, путь vim включает в себя файлы ftplugin/<filetype>.vim
и after/ftplugin/<filetype>/vim
.
Вы можете сделать это с помощью автокоманд в вашем .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
позволяет группировать связанные автокоманды в именованные группы. (См. Здесь, чтобы узнать о группах автокоманд.) Мы используем augroup
s для добавления автокоманд ~/.vimrc
таким образом, чтобы дубликаты не добавлялись при каждом их получении.
augroup vimrc
autocmd!
augroup END
autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4