6 апр. 2010 г.

Как сломать vim шаблонной магией

Симптомы:
Пишу в vim'е  objname. в момент написания точки vim, консолька а потом и весь гуй повисают.
Жму Ctrl+Alt+F1 через ~минуту вижу черноту текстовой консоли. Логинюсь. Отстает даже ввод текста в текстовом терминале. Таки умудряюсь глянуть top, узреть что все сожрал именно vim. Снимаю его. Переключаюсь обратно в графику. Наступаю снова на те же грабли. Снова привожу все в порядок. Догадываюсь наконец что происходит. Добиваюсь своего :)

Что происходило:
Vim у меня настроен таким образом, что если сгенерированы теги, он пытается провернуть code completion. Точка после слова в cpp файле - один из триггеров. В коде шаманский рекурсивно определенный класс-шаблон вида:

tempate <class T>
class A: public A<T> {
 ...
};

template <>
class A<NullT> { 
};

Означенный объект как раз этого чудо-класса. Vim, пытаясь предложить возможные варианты уходит все глубже и глубже в это наследование, которое несчастному редактору кажется вечным, ведь в его обязанности не входит разбираться со специализациями. Хотя разрабы могли бы хоть ограничение на поиск воткнуть. Быть может соберусь с силами и починю vim :)
Такие дела.

Комментариев нет: