Я пишу 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 ответа2

2

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

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

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

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

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

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

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

setlocal tabstop=8
setlocal shiftwidth=8
setlocal expandtab

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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .