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

772
Nosrettap

Я пишу 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.

0

2 ответа на вопрос

2
romainl

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 

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

0
Steven

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

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

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