Чи можна створити власні команди «set» у моєму файлі rc та викликати їх із моделі?


10

Нещодавно я задав питання, в якому я дізнався, що неможливо передати нічого, крім параметрів, :setу моделях vim. Я розумію проблеми безпеки, але мені цікаво, чи не існує іншого способу цього. Недавній питання про 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

Це певним чином буде подібне до відповідності типу файлів, але допускає ручне переопрацювання. Це також створює середовище іншими заздалегідь визначеними способами, уникаючи проблем безпеки, коли файл виконує інші довільні команди in vim, але дозволяє створювати більш настроєне середовище. Чи є спосіб це зробити?


Для цього потрібно визначити власний варіант для set; AFAIK, це неможливо у Vim ...
Мартін Турной

@Carpetsmoker Чи означає це, що відповідь на це питання полягає в тому, що vimscript не може обгортати або іншим чином розширювати вбудовані функції?
Калеб

Відповіді:


10

У вас є кілька варіантів.

  1. Перший: Ви можете написати власний декодер моделей, тобто плагін. Це дуже схожа відповідь на ту, яку я дав на ваше інше запитання.

    Дійсно, ми не можемо додати нові параметри vim (які можна встановити за допомогою :set), але ми можемо додати нові змінні. І ми не можемо використовувати стандартні моделі, щоб зробити більше, ніж встановити параметри vim.

  2. Друга можливість: дозволити моделін можна використовувати за допомогою функції зворотного дзвінка для виклику тієї чи іншої функції. Ви можете мати свою CodeStyle()функцію у .vimrcплагіні чи (автозавантаженні?), А тоді файли містять:

    # VIM: let b:codestyle='psr-2' b:ModeLine_CallBack='CodeStyle'
    

    Але якщо ваша потреба є точною, і якщо ви дійсно не хочете плагіни, такі як local_vimrc , тоді напишіть свій власний моделін-декодер.

  3. Третій, і ІМО, кращий вибір в цьому випадку було б визначити новий тип файлу і набір 'ft'для цього типу файлу в ModeLines з: # vim: set ft=php.psr2. Це phpглобальний звичайний тип файлу (я не впевнений у цьому) та psr2спеціалізований тип файлів, який відповідає вашим стилям кодування. Вам доведеться визначити два ftplugins: ftplugin / psr2.vim і та ftplugin / drupal7.vim, куди ви будете переносити свої дзвінки :setlocal(а не :set).


6
Запропонований варіант 3. Я вважаю, що це найбільш семантично підходящий і підходить Vim підхід.
tommcdo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.