Neovim: кастомизация настроек для разных типов файлов
Опубликовано 04.05.2024 в OpenBSD
Вот как я обычно пишу, например, статьи в этот бложик? Пишу я их в формате markdown в любимом на текущий момент текстовом редакторе Neovim и при открытии .md файлика автоматически уже ввожу следующее заклинание set spell spelllang=en,ru linebreak
. Чтобы, значится, включить проверку орфографии (spell), на нужных мне языках (spelllang=en,ru) и режим переноса строк с разбиением по словам (linebreak).
Ну, точнее, как ввожу... Это так выглядит только, что какая-то красноглазая магия, ввод заклинаний. На деле это доли секунды и чисто рефлекторное задействование мышечной памяти: два мизинчика (левый зажимает "Shift", а правый по умолчанию уже стоит на ":") и мы в командном режиме, начинаю вводить "se" и не закончив даже правым же мизинчиком на стрелку вверх - редактор из истории команд немедля подставляет мне последнее введенное, начинавшееся с "set" - а оно обычно и есть искомое. Ну если нет - то на стрелочку еще раз, отлистать историю команд. Получается даже не ввод заклинаний, а некие магические пассы мизинцами.
Но какого ж черта я выполняю эти (пусть даже секундные) действия каждый раз при начале работы с markdown??? Заскриптовать! Заскриптовать и забыть где! Ну а чтоб всё-таки не забыть, сохраняю рецепт.
В общем, neovim из коробки уже содержит (и более того, запускает без дополнительных напоминаний) плагин для определения типа файла, с коим мы имеем дело, и применение индивидуальных к оному типу настроек - ftplugin. Всё, что нам требуется, это прописать интересующие меня дополнительные опции, те самые, что я указывал вручную. Для этого создаем файлик ~/.config/nvim/after/ftplugin/markdown.lua
со следующим содержимым:
vim.opt.spell = true
vim.opt.spelllang = "en,ru"
vim.opt.linebreak = true
Синтаксис имеет значение: не забываем кавычки вокруг "en,ru", а то оно и переменной значение не присвоит, и не ругнется на это при старте.
Собственно, всё. Аналогично любые другие опции для этого или любых других типов файлов. Безусловно, существуют и более другие способы делать такие настройки, но я использую этот.