Vim замедляется со временем при включенном синтаксисе

11

Что я могу сделать, чтобы сохранить syntax onпри использовании Vim?

Как только я открываю что-то существенное, через некоторое время редактирование становится практически невозможным. Каждое нажатие вызывает задержку. Если я выключу подсветку синтаксиса или перезапущу vim - все снова хорошо.

Я synmaxcolустановил значение 120. Пример файла ruby ​​имеет длину всего 59 строк и не превышает 80 символов.

Я использую vim-rubyи vim-rails.

Проблема в том, что задержка накапливается со временем. Когда я открываю файл с нуля, это нормально. Через некоторое время он становится все медленнее и медленнее.

firedev
источник
1
Вы пытались повторить это с vim -Nu NONE -c 'syntax on'? Следовали ли вы советам по отладке этого поста
akshay
Какой тип файла? Любой?
Ромен
1
Рубин. На самом деле это редактируемый, -u NONEпоэтому он должен быть какой-то плагин. Угадай, что ответ на большинство вопросов - «отключи плагины, пока не найдешь виновника» :(
firedev
Но проблема в том, что задержка накапливается со временем. Когда я открываю файл с нуля, это нормально. Через некоторое время он становится все медленнее и медленнее.
firedev

Ответы:

13

В последних версиях Vim есть :syntimeкоманда для устранения проблем, связанных с медленной подсветкой синтаксиса, путем создания отчета о том, сколько времени требуется каждой синтаксической группе для сопоставления. Это очень полезно и позволяет быстро найти виновника; Единственным недостатком является то, что вам нужна (обычно «ОГРОМНАЯ») сборка Vim с включенным профилированием. :help :syntimeдает хорошие инструкции, как его использовать.

В качестве альтернативы вы можете попробовать удалить отдельные синтаксические сценарии из ~/.vim/syntax/и $VIMRUNTIME/syntax/(в соответствии с текущим 'filetype'), а затем продолжить детализацию, удалив части определений синтаксиса внутри сценария.

Инго Каркат
источник
Хм, интересно, звучит так, как-то связаны теги. В верхней строке, которая занимает больше всего времени, есть методы из других моих проектов. TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN 0.129674 247 182 0.002365 0.000525 rubyMethodNameTag \C\<\%(roi\|paginate\|admin_index_attributes\|facilities\|manager\|net_price?\ ....- это явно из другой папки. Отключить теги?
firedev
Используете ли вы плагин, который выделяет теги, такие как vim-easytags ? Это действительно может привести к замедлению.
Инго Каркат
Да, отключил это, не числа нормальные снова. Спасибо.
firedev
Хм, теперь он снова играет, на этот раз его: 0.121880 2078 54 0.002260 0.000059 rubySymbol []})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@= - Что я могу с этим поделать?
firedev
2
Это может быть новый движок регулярных выражений; попробуйте :set regexpengine=1(лучше всего в новом экземпляре Vim, прежде чем открывать файл Ruby).
Инго Каркат
5

Еще одним типичным узким местом в синтаксической подсветке vim является сворачивание. Редактирование может стать очень медленным, если сгиб содержит много элементов синтаксиса (что в основном означает, что он проходит через много строк), потому что vim обновит весь синтаксис для каждого вставленного символа.

Если это то, что вы испытываете, то я предлагаю использовать плагин FastFold . Этот плагин идентифицирует синтаксические сгибы и заменяет их на ручные сгибы, делая подсветку синтаксиса vim намного быстрее.

Витор
источник
1

Вот что я сделал в конце:

  • Удалены xolox/vim-easytags
  • Удалены xolox/vim-misc
  • Заменены kien/ctrlp d11wtq/ctrlp_bdeleteи tacahiroy/ctrlp-funkyс junegunn/fzf
  • Задавать regexpengine=1

Сейчас Вим гладкий, как масло, но у меня больше нет меток. Вздох...

firedev
источник
1
Vim имеет встроенную поддержку тегов. Вам не нужны никакие сторонние плагины (кроме ctags для создания файла тегов, конечно). См Effortless Ctags С Git статьи Тима папы. Я использую это и она творит чудеса. Также смотрите , :help tag-commandsчтобы перейти к метке. Я считаю, что ctags очень важен при работе с Vim. Это делает навигацию супер просто, и вы можете даже автозаполнение с :help i_Ctrl-x_Ctrl-]!
Акшай
Уход , чтобы добавить что - либо здесь vi.stackexchange.com/questions/2630/how-to-set-up-tags-properly ?
firedev