(Mac) Vim довольно медленно, когда для синтаксиса установлен Ruby

Я нахожусь на MacVim 7.4 (я использую версию командной строки), установленную через Homebrew.

Vim работает медленно, когда синтаксис выделяет Ruby-код. htop показывает 80% -100% использования ЦП при перемещении внутри файла Ruby в vim.

Я нашел их здесь на SO:

и попробовал предлагаемые решения. Что я сделал:

  • set regexpengine=1: ничего не изменилось. Все еще очень высокая загрузка процессора и медленные характеристики.
  • set lazyredraw: все лучше, но компромисс очень заметен (курсор исчезает при перемещении)
  • Я рассмотрел инструкции autocmd в моем .vimrc и не нашел ничего медленного в частности. Я попытался удалить все плагины, но проблема все еще там.

Я попытался отключить синтаксис и, ну, он решает проблему. Кроме того, запуск vim с vim -u NONE, а затем поворот syntax on решает проблему, так что это должно быть что-то в моем .vimrc, я думаю?

Здесь ссылка на мой vimrc.

Изменить

Возможно, я нашел виновные настройки. Кажется, есть две настройки, которые заметно замедляют движение в vim:

  • set relativenumber
  • set cursorline

Обратите внимание, что обе эти настройки запускают это поведение даже в одиночку.

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

Изменить # 2

Обратите внимание, что relativenumber и cursorline запускают это поведение только при использовании в файлах Ruby. Каждый другой тип файла, который я пробовал (с relativenumber и cursorline on), прокручивается плавно, независимо от того, как долго.

Ответы

Ответ 1

Как сказал avivr, Vim иногда медленно (особенно для ins-завершения) в больших файлах из-за foldmethod=syntax

От: help todo:

  • Медленная комбинация фальцовки и подсветки синтаксиса PHP. Script до воспроизведите его. Вызывается "sync sync fromstart" в сочетании с патчем 7.2.274. (Christian Brabandt, 2010 27 мая). Как правило, складывание с "foldmethod" установлен на "синтаксис" медленный. Профилируйте, чтобы узнать, почему.

плагин FastFold делает так, чтобы складки пересчитывались только на сохранение (поэтому вы всегда используете foldmethod=manual), но складки рассчитывается с помощью foldmethod=syntax или того, что вы ранее задали).

Это решило проблему для меня. Теперь я могу использовать comp-whole-line завершение в моем 5-строчном файле С++ и мгновенно и быстро, вместо того, чтобы принимать минуты и отвечать на запросы.

Ответ 2

Файл синтаксиса Ruby, как известно, медленный, лучше отключить 'cursorline', 'cursorcolumn', поскольку они будут вызывать наибольший эффект.

Однако вы также должны взглянуть на Vim slow с подсветкой синтаксиса ruby ​​. Что-то, что потенциально может также помочь улучшить ситуацию.

Ответ 3

У меня была эта проблема, я также попробовал set regexpengine=1 и другие. Мне казалось, что медленность была более или менее серьезной в зависимости от размера/сложности редактируемого файла, но потребовалось некоторое время, чтобы точно определить причину.

В моем случае виновником была следующая настройка:

autocmd Filetype ruby setlocal foldmethod=syntax

Этот параметр указывает Vim создавать сводки автоматически на основе синтаксических элементов (классов, функций, условных выражений). Я не думаю, что это важно, поскольку в этом случае он был установлен с autocmd. Я думаю, что проблема заключалась в том, что для довольно сложных файлов складки обновлялись в процессе редактирования, что приводило к резкому замедлению сложных файлов.

Надеюсь, это поможет кому-то.