Vim настройки · 4 min read · Nov 14, 2025
Как внести изменения в настройки файла в Vim с помощью Modeline
Хотя плагины, безусловно, являются одной из самых больших сильных сторон Vim, несколько других функций делают его одним из самых мощных и многофункциональных текстовых редакторов/IDE, доступных пользователям Linux сегодня. Одна из этих функций — возможность вносить изменения в настройки, специфичные для файла. Эта возможность доступна с помощью функции Modeline редактора.
В этой статье мы обсудим, как вы можете использовать функцию Modeline в Vim, используя простые для понимания примеры.
Но прежде чем мы начнем, стоит упомянуть, что все примеры, команды и инструкции, упомянутые в этом руководстве, были протестированы на Ubuntu 16.04 - Ubuntu 22.04.
VIM Modeline
Использование
Как уже упоминалось, функция Modeline в Vim позволяет вам вносить изменения, специфичные для файла. Например, предположим, вы хотите заменить все табуляции, используемые в определенном файле вашего проекта, на пробелы и убедиться, что все остальные файлы не затронуты этим изменением. Это идеальный случай, когда Modeline помогает вам в том, что вы хотите сделать.
Итак, что вы можете сделать, так это вставить следующую строку в начале или в конце рассматриваемого файла:
# vim: set expandtab:Существует высокая вероятность того, что если вы попробуете выполнить вышеупомянутое упражнение, чтобы протестировать случай использования на вашем Linux-устройстве, все не сработает так, как ожидалось. Если это так, не беспокойтесь, так как функция Modeline в некоторых случаях должна быть сначала активирована (по умолчанию она отключена на системах, таких как Debian, Ubuntu, Gentoo и OSX по соображениям безопасности).
Чтобы включить эту функцию, откройте файл .vimrc (расположенный в вашем домашнем каталоге) и добавьте в него следующую строку:
set modelineТеперь, когда вы вводите табуляцию и сохраняете файл (где была введена команда expandtab), табуляция автоматически преобразуется в пробелы.
Рассмотрим еще один случай использования. Предположим, что по умолчанию размер табуляции в Vim установлен на 4, но для определенного файла вы хотите увеличить его до 8. Для этого вам нужно добавить следующую строку в начале или в конце файла:
// vim: noai:ts=8:
Теперь попробуйте ввести табуляцию, и вы увидите, что количество пробелов, которое она занимает, будет равно 8.
Вы могли заметить, что я сказал, что эти команды modeline нужно вводить где-то в верхней или нижней части файла. Если вы задаетесь вопросом, почему это так, причина в том, что функция разработана именно так. Следующие строки (взятые из официальной документации Vim) должны прояснить это:
“ Modeline не может находиться где угодно в файле: она должна быть в первых или последних нескольких строках. Точное место, где vim проверяет modeline, контролируется переменной modelines; см. :help modelines . По умолчанию она установлена на 5 строк.
А вот что говорит команда :help modelines (на которую ссылаются в вышеупомянутых строках):
Если 'modeline' включен, 'modelines' дает количество строк, которые проверяются на команды установки. Если 'modeline' отключен или 'modelines' равен нулю, никакие строки не проверяются.Попробуйте поместить команду modeline за пределами диапазона по умолчанию в 5 строк (либо снизу, либо сверху), и вы заметите, что табуляции вернутся к значению по умолчанию в Vim - в моем случае это 4 пробела.
Тем не менее, вы можете изменить это поведение, если хотите, используя следующую команду в вашем файле .vimrc.
set modelines=[new-value]Например, я увеличил значение с 5 до 10.
set modelines=10Это означает, что теперь я могу поместить команду modeline где угодно между первыми или последними 10 строками файла.
Двигаясь дальше, в любой момент времени, редактируя файл, вы можете ввести следующее (с редактором Vim в командном режиме), чтобы увидеть текущие настройки, связанные с modeline, а также где они были установлены в последний раз.
:verbose set modeline? modelines?Например, в моем случае вышеуказанная команда выдала следующий вывод:
modeline
Последний раз установлен из ~/.vimrc
modelines=10
Последний раз установлен из ~/.vimrcВот некоторые важные моменты, которые вам нужно знать о функции Modeline в Vim:
- Эта функция включена по умолчанию для Vim, работающего в режиме nocompatible (не совместимом с Vi), но некоторые заметные дистрибутивы Vim отключают эту опцию в системном vimrc по соображениям безопасности.
- Функция отключена по умолчанию при редактировании от имени root (если вы открыли файл с помощью ‘sudo’, то проблем нет - функция работает).
- С ‘
set', modeline заканчивается на первом двоеточии, не следующем за обратной косой чертой. А без ‘ `set’’, никакой текст не может следовать за опциями. Например, / vim: noai:ts=4:sw=4 / является недопустимым modeline. ### Проблемы безопасности К сожалению, функция Modeline в Vim может быть использована для компрометации безопасности. На самом деле, в прошлом было сообщено о нескольких проблемах с Modeline, связанных с безопасностью, включая инъекцию команд оболочки, выполнение произвольных команд, несанкционированный доступ и многое другое. Согласен, большинство из них устарели и, вероятно, были исправлены к настоящему времени, но это дает представление о том, что функцию Modeline могут злоупотреблять хакеры. ## Заключение Modeline может быть продвинутой функцией редактора Vim, но ее не так сложно понять. Нет сомнений, что существует небольшая кривая обучения, но это не так уж много, учитывая, насколько полезна эта функция. Конечно, существуют проблемы безопасности, что означает, что вам следует взвесить свои варианты перед включением и использованием этой функции. Вы когда-нибудь использовали функцию Modeline? Каков был ваш опыт? Поделитесь с нами (и всей сообществом HowtoForge) в комментариях ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.