(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.
Я думаю, что проблема заключалась в том, что для довольно сложных файлов складки обновлялись в процессе редактирования, что приводило к резкому замедлению сложных файлов.
Надеюсь, это поможет кому-то.