Vim медленный с подсветкой синтаксиса рубина
Я использую vim над ssh для работы в течение недели или двух, и все идет отлично. Сегодня я решил добавить подсветку синтаксиса, автозаполнение и некоторые другие общие плагины. Настроить vundle и пошел на работу.
Мой текущий .vimrc можно найти на https://github.com/scottopell/dotfiles/blob/master/.vimrc
Я клонировал свои файлы vimrc и vim на свой локальный рабочий стол ubuntu, и vim работает точно так, как ожидалось, без медлительности в любых файлах, которые я могу найти. Такие же плагины и те же vimrc и без медлительности на рубиновых файлах.
обновление
Я могу воспроизвести эту проблему со следующим .vimrc
syntax on
и пустую папку ~/.vim
.
Однако vim на этом vps очень медленный с файлами ruby /haml. Много более рубиновых файлов. Когда я открываю любой файл ruby, запуск занимает около 2 секунд (приурочен к --startuptime). С сопоставимым размером haml файла, его около 0,5 секунд. Эта медлительность не только при запуске, но и перемещение и редактирование файла очень медленны.
Haml/erb (они в основном одинаковы)
268.818 000.005: before starting main loop
848.871 580.053: first screen update
Рубин
199.613 000.004: before starting main loop
2937.859 2738.246: first screen update
Без подсветки синтаксиса в том же рубиновом файле, что и выше
149.047 000.004: before starting main loop
152.912 003.865: first screen update
Я пробовал использовать mosh (http://mosh.mit.edu), и это не помогает. больше не актуально
Как вы можете видеть в моем файле .vimrc, я попробовал несколько разных решений этой проблемы.
Я пробовал работать со всеми отключенными плагинами (я переместил их все от ~/vim/bundle/PLUGINNAME
до ~/vim/bundle/disabled/PLUGINNAME
, это правильно?), Установите рубиновый путь, установите foldlevel в ручную, отключите мою цветовую схему, ничего не помогает. см. edit3
Я могу опубликовать полный журнал startupttime для любого файла, если это поможет.
Я тестировал несколько других языков (php, c, python, vimL), и никто не испытывал замедление.
РЕДАКТИРОВАТЬ: Чтобы уточнить, я запускаю сеанс ssh с ssh user @server, а затем один раз на сервере, который я делаю vim file.rb.
EDIT2: Я просто попытался получить доступ к серверу напрямую, и медлительность сохраняется без ssh, я обновился, чтобы отразить, что это не проблема с ssh.
EDIT3: Я могу воспроизвести проблему с .vimrc файлом, который содержит единственную строку syntax on
с пустой папкой ~/.vim
EDIT4 Я удалил свою скомпилированную версию vim и любые версии, которые я, возможно, установил с помощью apt, вручную удалил все материалы vim из своей системы, и я могу запустить vim с помощью vim -u NONE /path/to/file.rb
, а затем выполните: syn, и проблема будет там. Этот файл является контроллером rails, но, как я уже сказал, я могу в какой-то мере воссоздать его в большинстве файлов, но контроллеры rails выглядят хуже.
Ответы
Ответ 1
Решение этой проблемы оказалось движком regex, который использует vim.
Спекуляция на #vim на freenode заключается в том, что файлы синтаксиса ruby используют что-то более медленное в новом движке regex.
Любая версия старше и включая Vim 7.3.969 имеет старый механизм регулярных выражений.
Добавьте set re=1
в vimrc
, чтобы заставить старый механизм регулярных выражений использовать любую новую версию (и не забывайте перезагружать файл, который вы сейчас редактируете, с помощью :e
).
Спасибо Houl, Dolio и dmedvinsky от #vim за помощь в выяснении этого.
У меня не было возможности попробовать абсолютную последнюю версию, вчера была фиксация, которая может помочь в этой проблеме. Я обновлю это, если у меня появится возможность снова попробовать версию для устранения кровотечений.
Ответ 2
Вы должны установить эти параметры tw в своем vimrc:
set ttyfast
set lazyredraw
Если это не решит вашу проблему, попробуйте запустить vim без вашего vimrc, чтобы убедиться, что ни один из ваших текущих настроек не задевает его.
vim -u NONE
Ответ 3
Две вещи, которые резко помогут ускорить выделение синтаксиса Ruby, - это отключение строки курсора и относительного числа для Ruby (если вы их используете).
У меня есть следующее в моем .vimrc:
" Ruby is an oddball in the family, use special spacing/rules
if v:version >= 703
" Note: Relative number is quite slow with Ruby, so is cursorline
autocmd FileType ruby setlocal ts=2 sts=2 sw=2 norelativenumber nocursorline
else
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
endif
Ответ 4
Попробуйте вручную установить свой рубиновый путь в vimrc:
let g:ruby_path="/usr/bin/ruby"
Ответ 5
Я использую vim 7.4.52, и ни одно из этих решений не работало для меня.
В соответствии с этим github комментировать проблему (https://github.com/vim/vim/issues/282#issuecomment-169837021), foldmethod=syntax
отвечает за медленность.
Добавление этого в мой .vimrc наконец-то исправило его!
augroup ft_rb
au!
" fix the SLOOOW syntax highlighting
au FileType ruby setlocal re=1 foldmethod=manual
augroup END
Ответ 6
см. UPDATE внизу.
это может быть полезно в качестве обходного пути -
Я использую версию vim
VIM - Vi IMproved 7.4 (2013 Aug 10, составлено 2 января 2014 19:40:46)
Включенные патчи: 1-52
это версия запаса от
Linux Mint 17.1 Ребекка.
Файл синтаксиса php.vim не является версией, которую я могу видеть, но это sez last edit'd 28 aug 13.
это не рубиновый проект, но при редактировании большого файла класса php (
$ php -w test.inc | wc
2 2410 19220
) Я отмечаю значительные задержки в верхней части класса, но не выше или ниже класса, и, особенно, не в нижней части класса. поскольку я пытаюсь вставить новый текст в нижней части класса, задержка минимальна и, по-видимому, пропорциональна номеру строки внутри класса. "минимальный" означает почти мгновенно, "значимый" означает от 1 до 1,5 секунд на символ.
файл содержит приблизительно 1800 строк с приблизительно 500 строками законных php и 1300 строк комментариев и документа. класс начинается с приблизительной строки 30 и заканчивается примерно на 1700. Он уступает ему немного большим, но хорошо документирован: -\
если я вставляю
class dummy { }
перед оригиналом "class originalName {",
в любом месте файла нет задержки. это неприглядное kluge позволяет vim/gvim восстановить его отзывчивость и может считаться обходным решением. обратите внимание на отсутствие перевода между ними, просто
class dummy { } class originalName {
его можно даже прокомментировать:
/*class dummy {}*/class originalName {
Дополнительная информация:
-
во время этого теста был перемещен каталог плагинов.
-
с "set syntax = off" проблема полностью исчезает. это НЕ исправить.
-
установка механизма регулярных выражений с помощью
set regexpengine=1 (or any other number)
не заметно меняет результаты.
на основе этих результатов, я бы заподозрил и механизм регулярных выражений. моя точка зрения заключается в том, что немногое с синтаксисом в файлах ruby может привести к обходному пути.
UPDATE:
Я обнаружил, что проблема "вызвана", установив php_folding в 1 (включено). vimrc я THOUGHT, который я использовал, не было, но по крайней мере часть этой тайны решается из-за этой ошибки. простой vimrc, подобный этому, вызовет проблему (для меня, как минимум):
:syntax enable
:let php_folding = 1
это означает, что моя проблема полностью не связана с проблемой ruby, но может быть аналогичная ситуация с файлом ruby.vim. возможно, нет.
извинения за отклонение.
Ответ 7
Я пробовал большинство из этих решений, но в итоге я работал лучше всего, удаляя любые плагины, связанные с авиакомпанией.