Подтвердить что ты не робот

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 выглядят хуже.

4b9b3361

Ответ 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

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