Поиск по сайту:

Как внести изменения в настройки файла в Vim с помощью Modeline


На этой странице

  1. Модель VIM
    1. Использование

    Хотя плагины, без сомнения, являются одной из самых сильных сторон Vims, есть несколько других функций, которые делают его одним из самых мощных и многофункциональных текстовых редакторов/IDE, доступных сегодня пользователям Linux. Одной из этих функций является возможность вносить изменения в настройки для конкретных файлов. Доступ к этой возможности можно получить с помощью функции редактора Modeline.

    В этой статье мы обсудим, как вы можете использовать функцию Vims Modeline, используя простые для понимания примеры.

    But before we start doing that, it's worth mentioning that all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 16.04, and the Vim version we've used is 7.4.

    Модельный ряд ВИМ

    Применение

    Как мы уже упоминали, функция Vims Modeline позволяет вносить изменения в файлы. Например, предположим, что вы хотите заменить все вкладки, используемые в конкретном файле вашего проекта, пробелами и убедиться, что это изменение не затронет все остальные файлы. Это идеальный вариант использования, когда Modeline помогает вам в том, что вы хотите сделать.

    Итак, что вы можете сделать, так это поместить следующую строку в начало или конец рассматриваемого файла:

    # vim: set expandtab:

    Существует высокая вероятность того, что если вы попытаетесь выполнить вышеупомянутое упражнение для проверки варианта использования на своем компьютере с Linux, все будет работать не так, как ожидалось. Если это так, не беспокойтесь, так как в некоторых случаях сначала необходимо активировать функцию Modeline (она отключена по умолчанию в таких системах, как Debian, Ubuntu, Gentoo и OSX, из соображений безопасности).

    Чтобы включить эту функцию, откройте файл .vimrc (расположенный в вашем домашнем каталоге) и добавьте в него следующую строку:

    set modeline

    Теперь всякий раз, когда вы открываете вкладку и сохраняете файл (где была введена команда модели expandtab), вкладка автоматически преобразуется в пробелы.

    Давайте рассмотрим другой вариант использования. Предположим, что пространство табуляции по умолчанию в Vim установлено на 4, но для конкретного файла вы хотите увеличить его до 8. Для этого вам нужно добавить следующую строку в начало или конец файла:

    // vim: noai:ts=8:

    Теперь попробуйте ввести вкладку, и вы увидите, что количество пробелов, которые она покрывает, будет равно 8.

    Вы могли заметить, что я говорю, что эти команды modeline нужно вводить где-то в верхней или нижней части файла. Если вам интересно, почему это так, причина в том, что эта функция разработана таким образом. Следующие строки (взятые из официальной документации Vim) должны прояснить это:

    \Модельная линия не может находиться где-либо в файле: она должна быть в первых или последних нескольких строках. Точное место, где vim проверяет модельную линию, определяется переменной modelines; см. : help modellines. По умолчанию установлено 5 строк.\

    А вот что говорит команда :help modelines (упомянутая в приведенных выше строках):

    If 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.

    Попробуйте поместить команду modeline за пределы диапазона 5 строк по умолчанию (либо снизу, либо сверху), и вы заметите, что пространства вкладок вернутся к значениям по умолчанию для Vim — в моем случае это 4 пробела.

    Однако вы можете изменить это поведение, если хотите, используя следующую команду в вашем файле .vimrc.

    set modelines=[new-value]

    Например, я увеличил значение с 5 до 10.

    set modelines=10

    Это означает, что теперь я могу поместить команду modeline где-нибудь между первыми и последними 10 строками файла.

    Двигаясь дальше, в любой момент времени при редактировании файла вы можете ввести следующее (с редактором Vim в командном режиме), чтобы увидеть текущие настройки, связанные с моделью, а также где они были установлены в последний раз.

    :verbose set modeline? modelines?

    Например, в моем случае приведенная выше команда выдала следующий вывод:

     modeline
    Last set from ~/.vimrc
    modelines=10
    Last set from ~/.vimrc

    Вот некоторые из важных моментов, которые вам нужно знать о функции Vims Modeline:

    • Эта функция включена по умолчанию для Vim, работающего в несовместимом (несовместимом с Vi) режиме, но некоторые известные дистрибутивы Vim отключают эту опцию в системном vimrc в целях безопасности.
    • Эта функция по умолчанию отключена при редактировании от имени пользователя root (если вы открыли файл с помощью sudo, тогда проблем нет — функция работает).
    • С set линия модели заканчивается первым двоеточием, не следующим за обратной косой чертой. А без set текст не может следовать за опциями. Например, /* vim: noai:ts=4:sw=4 */ — недопустимая модель.

    Вопросы безопасности

    К сожалению, функция Vims Modeline может быть использована для нарушения безопасности. Фактически, в прошлом сообщалось о многочисленных проблемах Modeline, связанных с безопасностью, включая несанкционированный доступ и многое другое. Согласитесь, большинство из них устарели и к настоящему времени были бы исправлены, но это дает представление о том, что функция Modeline может быть использована хакерами не по назначению.

    Заключение

    Modeline может быть расширенной функцией редактора Vim, но понять ее несложно. Нет никаких сомнений в том, что требуется некоторое обучение, но это не так уж и много, учитывая, насколько полезна эта функция. Конечно, есть проблемы с безопасностью, а это означает, что вы должны взвесить свои варианты, прежде чем включать и использовать эту функцию.

    Вы когда-нибудь использовали функцию Modeline? Каким был ваш опыт? Поделитесь с нами (и всем сообществом HowtoForge) в комментариях ниже.