Плагин matchit.vim для vi и b:match_words

Вопрос или проблема

Несколько лет назад все, что вам нужно было сделать, это убедиться, что плагин matchit.vim установлен, чтобы иметь возможность сопоставлять начальные/конечные конструкции в bash, такие как if/elif/else/fi, но что-то произошло, и, хотя matchit.vim включен по умолчанию в Ubuntu, эти связанные термины больше не определены.

Я поместил let b:match_words="if:elif:else:fi,while:done,until:done" в .vimrc, и это как-то работает (если у вас есть вложенная until..done внутри while..done, это сбивается с толку).

Я надеюсь, что у кого-то есть дистрибутив, где b:match_words предопределен, и он может выполнить let b:match_words в vi, а затем опубликовать результаты здесь (если возвращается “undefined variable”, и :scriptnames в vi показывает, что matchit.vim загружен, то вы находитесь в таком же положении).

Ответ или решение

Вопрос, который вы подняли, довольно интересен и касается использования плагина matchit.vim в текстовом редакторе Vim, а именно его возможности сопоставления начальных и конечных конструкций в сценариях на языке bash. Несмотря на то что matchit.vim часто был встраиваемым решением для таких задач, кажется, что в какой-то момент его функциональность перестала соответствовать прежним ожиданиям, особенно на дистрибутивах Ubuntu, где он уже встроен по умолчанию.

Теория

Плагин matchit.vim был разработан для расширения функции поиска соответствий в Vim. Он позволяет пользователям легко переходить между парными конструкциями в коде, подобно тому, как это делается для скобок. Для bash-скриптов это крайне полезно, так как он может помочь в навигации между такими конструкциями, как if ... fi, while ... done и другими. Однако, приложение этого плагина требует настройки переменной b:match_words, которая определяет набор соответствующих пар в зависимости от языковых конструкций. Она может быть определена в вашем .vimrc или в файлах, загружаемых при старте Vim.

Пример

Вы упомянули, что добавили в .vimrc следующее выражение:

let b:match_words="if:elif:else:fi,while:done,until:done"

Это определение в принципе корректно, однако оно может создавать нежелательные эффекты и путаницу, особенно в сложных случаях, где конструкции вложены друг в друга, например, until...done внутри while...done. Это связано с тем, что Matcher в текущей конфигурации не всегда может точно определить, какая из конструкций "done" соответствует начальной.

Применение

Для решения вашей проблемы можно предложить несколько подходов:

  1. Проверить и обновить matchit.vim: Начнем с проверки, что загружена последняя версия плагина и что он правильно настроен в вашей системе. Используйте команду :scriptnames в Vim, чтобы убедиться, что плагин загружен и активен. Если версия устарела, стоит вручную обновить ее из публичных репозиториев или напрямую с официального сайта Vim.

  2. Настройка b:match_words: Вместо непосредственного указания этой переменной в .vimrc возможно использовать настройки через autocmd, чтобы она применялась только к файлам bash. Например:

    autocmd FileType sh let b:match_words="if:elif:else:fi,while:done,until:done"

    Такой подход гарантирует применение настроек конкретно для скриптов sh (bash).

  3. Оптимизация и тестирование: Если конфликты все еще возникают, попробуйте использовать более сложные шаблоны для b:match_words. В некоторых случаях помогает использование lua-скриптов или написание специфичных фрагментов на VimL, которые могут вести себя как плагины, для повышения фрагментированности и точности поиска соответствий.

  4. Поиск существующих решений: Попробуйте найти конфигурации или обновленные версии matchit.vim от других пользователей на платформах, таких как GitHub, StackExchange или форумах, посвященных VIM. Некоторые пользователи могли уже решить аналогичные проблемы и поделиться своими решениями.

  5. Доработка через плагины: Если проблема все еще остается нерешенной или требует более специализированного подхода, можно рассмотреть разработку или установку дополнительного плагина. Некоторые Vim-комьюнити уже разрабатывают специфические расширения для поддержки различных языков программирования.

В итоге, большую роль в успешной настройке matchit.vim играет не только сам плагин, но и грамотная настройка окружения и конфигурация Vim. Если предложенные решения не дают ожидаемого результата, возможно, стоит рассмотреть перенос части использования на альтернативные платформы для редактирования, которые могут предоставить более интуитивные инструменты для работы с bash-скриптами.

Оцените материал
Добавить комментарий

Капча загружается...