Как изменить языковые плагины в vim?

Я пишу SML программа и я пытаюсь изменить размер отступов. Если я добавлю следующее к моему .vimrc файл

set tabstop=8
set shiftwidth=8
set expandtab

Это не отражено в моих реальных файлах. Я знаю это, потому что, когда я открываю .sml файл и тип :set это показывает, что shiftwidth=2

Я считаю, что Vim использует sml плагин, потому что мой .vimrc Файл (похожий на файл по умолчанию) имеет следующее:

if has("autocmd")

  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  filetype plugin indent on

Во-первых, что значит if имеет ("autocmd")? И второе. Как настроить размер отступа по умолчанию для файлов.sml? Где я мог бы найти этот плагин (если это действительно проблема? Я все еще хочу сохранить остальные функции плагина sml.

2 ответа

autocmdЭто специальные команды, запускаемые для определенных событий или для определенных типов файлов. Они часто используются для установки параметров или определения отображений, которые имеют смысл на одном языке, но не на других.

поскольку autocmds широко используются для файловых типов, if has("autocmd") это способ проверить, если autocmd функция доступна и что мы можем идти дальше без особого риска.

Правильное расположение для хранения настроек, относящихся к типу файла: ~/.vim/after/ftplugin/<filetype>.vim, поэтому вы должны написать свои настройки в:

~/.vim/after/ftplugin/sml.vim

Этот файл поставляется Vim после установленного по умолчанию ftplugin, так что вы можете, например, изменить только значение tabstop и оставьте другие настройки.

Тем не менее, глядя на мою собственную среду выполнения Vim (/usr/share/vim/vim73) похоже, что нет ftplugin для sml, Это означает, что ~/.vim/ftplugin/sml.vim будет одинаково правильным выбором места. Выберите тот, который вам нравится.

В этом файле просто добавьте нужные строки:

setlocal tabstop=8
setlocal shiftwidth=8
setlocal expandtab

и вы настроены

Typing :help autocmd скажет вам, что делает autocmd. По сути это означает, что vim может автоматически выполнять команды при определенных событиях.

Вы можете напечатать :echo $VIMRUNTIME чтобы увидеть, где vim хранит свои общесистемные плагины. Скорее всего, будет каталог синтаксиса, отступа и ftplugin с файлами, которые будут автоматически загружаться при загрузке соответствующего файла соответствующего типа.

В качестве альтернативы эти файлы будут находиться в тех же каталогах под вашим каталогом ~/.vim

Другие вопросы по тегам