Недавно я задал вопрос, в котором я узнал, что невозможно передать ничего, кроме параметров, :set
в vim modelines. Я понимаю проблемы безопасности, но мне интересно, нет ли другого способа обойти это. Недавний вопрос о SO о создании крупных партий параметров в соответствии с кодирующим стандартом заставил меня думать, было бы возможно определить «группу» вещи в моем файле гс , которые могут быть включены или выключен из режимных?
Извините за псевдокод, но есть ли способ создать функцию, которая запускается из заданного параметра?
set_function! codestyle()
if &1 == 'psr-2'
set ts=4
set sw=4
endfi
if &1 == 'drupal7'
set ts=2
set sw=2
iab D8 Drupal 8
endif
endset_function
Это может быть вызвано такой модельной линией, как
# vim: codestyle=psr-2
В некотором смысле это будет похоже на сопоставление типов файлов, но допускает ручное переопределение. Это также настроило бы окружение другими предопределенными способами, избегая проблем безопасности, связанных с тем, что файл запускал другие произвольные команды в vim, но позволяя более настраиваемую среду. Есть ли способ сделать это?
set
; AFAIK, это невозможно в Vim ...Ответы:
У вас есть несколько вариантов.
Первый: вы можете написать свой собственный вид моделин-декодера, то есть плагин. Это очень похожий ответ на тот, который я дал на ваш другой вопрос.
Действительно, мы не можем добавлять новые опции vim (которые можно установить с помощью
:set
), но мы можем добавлять новые переменные. И мы не можем использовать стандартные модели, чтобы делать больше, чем просто устанавливать параметры vim.Вторая возможность: let-modeline может быть использована через функцию обратного вызова для вызова той или иной функции. Вы могли бы иметь свою
CodeStyle()
функцию в вашем.vimrc
плагине или (автозагрузке?), Тогда ваши файлы содержат:Но если вам нужна такая точность и если вы действительно не хотите подключаемых модулей , таких как local_vimrc , напишите свой собственный моделеподобный декодер.
Третий, и ИМО, лучший выбор в этом случае было бы определить новый тип файла и набор
'ft'
для этого типа файла в ModeLines с:# vim: set ft=php.psr2
. Сphp
будучи глобальной обычный (тип файла я не уверен насчет этого), иpsr2
будучи специализированным Filetype , который будет соответствовать вашим кодирования стилей. Вам нужно определить два ftplugins: ftplugin / psr2.vim и и ftplugin / drupal7.vim, куда вы будете звонить:setlocal
(а не:set
).источник