2010-02-06 3 views
14

Мне кажется, что подсветка синтаксиса Vim для Haskell сломана или очень глючит. Многострочные комментарии в Haskell (начиная с {- и заканчивая -}) произвольно выровнены и не очищены. Иногда перетаскивание мыши по прокомментированному коду приводит к обратному цвету.Является ли синтаксис синтаксиса Vim's Haskell сломанным?

Неужели кто-нибудь еще испытывал эту проблему?

+0

+1, да, это действительно странно! Прокрутка к символу '-}' или '* /' комментария (и нажатие '%' при необходимости) часто фиксирует его. – JMCF125

+0

Я собирался опубликовать этот вопрос (до того, как я увидел твой, то есть), и сделал снимок экрана, чтобы проиллюстрировать эффект (не совсем то же, но похожее). Могу я добавить его к вашему вопросу? – JMCF125

ответ

15

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

Различные методы, используемые для определения того, сколько текста для проверки можно увидеть на :help :syn-sync. Если вы хотите использовать Just Work, используйте :syn sync fromstart, чтобы Vim рассмотрел весь буфер до курсора, чтобы определить выделение.

+3

Имейте в виду, что когда Vi говорит о «производительности», они говорят о производительности на 1980-е годы. На современной машине не требуется слишком много времени для сканирования всего файла при каждом нажатии клавиши, поэтому вам не стоит беспокоиться об этом. – jrockway

+7

В общем, вы правы, jrockway. Однако, как я уже упоминал в своем комментарии к ответу Паула, у Vim очень низкая производительность при работе с чрезмерно длинными линиями. Это также может быть усугублено неэффективно написанными файлами синтаксиса (например, для html и xml). Как правило, это не будет происходить при кодировании, но при открытии файла XML с приличным размером, который является одной строкой, вы увидите, что я имею в виду. – jamessan

2

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

http://vimdoc.sourceforge.net/htmldoc/syntax.html

+0

Вы уверены? Я никогда не сталкивался с этой проблемой с другими языками, ни с редакторами без расширенного анализа. – xkdkxdxc

+0

Это определенно происходит на C++, раньше у меня были знакомые, но не помню, на каком языке он был. – paul

+0

Я также видел, как это происходит в LUA и C#. Например, загрузите источник для надстроек Peggle/Bejeweled World of Warcraft и попробуйте отредактировать файлы .lua в VIM. Они «оптимизированы», объединяя каждое утверждение в одну строку. Интерпретатор LUA не жалуется, но синтаксис hi-lighting, похоже, частично отделяет линию. –