#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
чтобы скрыть все эти неприятные ifsset 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. Я использую сворачивание, и функция довольно умная.