Vim zwalnia z czasem przy włączonej składni


11

Czy jest coś, co mogę zrobić, aby zachować syntax onpodczas korzystania z Vima?

Gdy tylko otworzę coś znaczącego, edycja po chwili staje się prawie niemożliwa. Każde naciśnięcie klawisza powoduje opóźnienie. Jeśli wyłączę podświetlanie składni lub ponownie uruchomę vima - znowu będzie dobrze.

Mam synmaxcolustawione na 120. Przykładowy plik Ruby jest tylko 59 linie długości nie przekraczającej 80 znaków.

Używam vim-rubyi vim-rails.

Problem polega na tym, że opóźnienie kumuluje się z czasem. Kiedy otwieram plik od zera, wszystko jest w porządku. Po chwili robi się coraz wolniej.


1
Próbowałeś to powtórzyć vim -Nu NONE -c 'syntax on'? Czy postępowałeś zgodnie ze wskazówkami dotyczącymi debugowania w tym poście
akshay,

Jaki typ pliku Każdy?
romainl

1
Rubin. Rzeczywiście można go edytować, -u NONEwięc musi to być wtyczka. Zgadnij, odpowiedź na większość pytań brzmi: „wyłącz wtyczki, dopóki nie znajdziesz winnego” :(
firedev

Problem jednak polega na tym, że opóźnienie wydaje się kumulować z czasem. Kiedy otwieram plik od zera, wszystko jest w porządku. Po chwili robi się coraz wolniej.
firedev

Odpowiedzi:


14

Najnowsze wersje Vima zawierają :syntimepolecenie rozwiązania problemu spowolnienia podświetlania składni poprzez wygenerowanie raportu o tym, ile czasu zajmuje każda grupa składni. Jest to bardzo pomocne i pozwala szybko znaleźć winowajcę; jedyną wadą jest to, że potrzebujesz (zwykle „OGROMNEGO”) kompilacji Vima z włączonym profilowaniem. :help :syntimezapewnia dobre instrukcje, jak go stosować.

Alternatywnie możesz spróbować usunąć poszczególne skrypty składniowe zi ~/.vim/syntax/i $VIMRUNTIME/syntax/(zgodnie z bieżącym 'filetype'), a następnie przejść do dalszych szczegółów, usuwając części definicji składni w skrypcie.


Hmm ciekawe, brzmi jak to jest związane z tagami. Górna linia, która zajmuje najwięcej czasu, zawiera metody z moich innych projektów. 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?\ ....- to wyraźnie z drugiego folderu. Wyłączyć tagi?
firedev

Czy używasz wtyczki, która wyróżnia tagi, takie jak vim-easytags ? To może rzeczywiście spowodować spowolnienie.
Ingo Karkat,

Tak, wyłączyłem to, nie liczby znów są zdrowe. Dzięki.
firedev

Hmm, teraz znowu działa, tym razem: 0.121880 2078 54 0.002260 0.000059 rubySymbol []})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@= - Coś mogę z tym zrobić?
firedev

2
Może to być nowy silnik regexp; spróbuj :set regexpengine=1(najlepiej w nowej instancji Vima, przed otwarciem pliku Ruby).
Ingo Karkat,

5

Kolejnym typowym wąskim gardłem w składni vima jest składanie. Edycja może stać się bardzo wolna, jeśli fold zawiera wiele elementów składni (co w zasadzie oznacza, że ​​przechodzi przez wiele wierszy), ponieważ vim odświeży całą składnię dla każdego wstawionego znaku.

Jeśli tego właśnie doświadczasz, sugeruję użycie wtyczki FastFold . Ta wtyczka identyfikuje składanie składni i zastępuje je składaniem ręcznym, dzięki czemu składnia vima jest podświetlana znacznie szybciej.


1

Oto co ostatecznie zrobiłem:

  • Oddalony xolox/vim-easytags
  • Oddalony xolox/vim-misc
  • Zastąpiony kien/ctrlp d11wtq/ctrlp_bdeletei tacahiroy/ctrlp-funkyze junegunn/fzf
  • Zestaw regexpengine=1

W tej chwili Vim jest gładki jak masło, ale nie mam już tagów. Westchnienie...


1
Vim ma wbudowaną obsługę tagów. Nie potrzebujesz żadnych wtyczek innych firm (oczywiście poza ctags do generowania pliku tagów). Zobacz artykuł Effortless Ctags With Git autorstwa Tima Pope'a. Używam tego i działa cuda. Zobacz także, :help tag-commandsaby przejść do tagu. Uważam, że ctagi są bardzo istotne podczas pracy z Vimem. To sprawia, że ​​nawigacja jest bardzo prosta i możesz nawet autouzupełnianie :help i_Ctrl-x_Ctrl-]!
akshay

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.