VIM для PHP: список if() и include() в списке тегов

#php #vim #taglist

#php #vim #список тегов

Вопрос:

Я использую Taglist в VIM, но одно конкретное PHP-приложение, которое я унаследовал, кодируется с помощью if() и elseif(), а также include() . Ни одного метода или функции почти в 5000 строк кода на файл (и десятки или сотни файлов). Есть ли какой-либо способ использовать Taglist или другой плагин, чтобы получить обзор потока кода? Я думаю о чем-то вроде краткого отображения условий в if () на боковой панели, включая их иерархию. Все, что хоть немного близко к этому, было бы здорово.

Спасибо!

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

1. Я думаю, вам следует пойти и застрелить парня, который это написал? Для меня? Для пользы этого языка? Серьезно, такого рода вещи заставляют людей думать, что PHP — это просто игрушка, несмотря на его широкое использование в больших приложениях …

Ответ №1:

это требует небольшой работы, вам нужно будет скомпилировать модифицированную версию exuberant ctags с измененными правилами для php.

возможно, вы захотите посмотреть здесь: http://ctags.sourceforge.net/EXTENDING.html

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

1. Спасибо, Люси. Я только что просмотрел этот документ, однако мне не кажется, что можно было бы добавить поддержку if s и других управляющих операторов. У вас было что-то еще на уме?

2. то, что ctags считает тегом, настраивается — вам нужно будет определить новый «язык», который объясняется на странице, на которую ссылается Люси. Вот действительно старый пример gist.github.com/f10f372c90474c88557c создание языка для php фреймворка CakePHP

3. Спасибо, Люси, это может быть ближе всего к тому, что мне нужно.

Ответ №2:

Использование плагина foldlist вместе с foldmethod-syntax (или настройка вашего собственного foldmethod-expr ) будет работать хорошо.

На самом деле, даже без плагина я считаю, что правильная настройка fold будет творить чудеса. Некоторые рекомендации:

  • set foldmethod=syntax или ( set foldmethod=expr и set foldexpr=... для вашего случая)
  • set foldclose=all чтобы скрыть все эти неприятные ifs
  • set foldcolumn=2 или больше, чтобы увидеть уровень вложенности
  • set foldtext=MyFoldText() и создайте функцию, которая покажет вам соответствующую информацию,

Нравится:

 function! MyFoldText()
   let line = getline(v:foldstart)
   let line = substitute(line, 'if((.*)).*', 'if: 1', 'g')
   " ... etc
   return line
endfunction
  

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

1. Спасибо Eelvex. Я использую сворачивание, и функция довольно умная.