Автозавершение кода для phalconphp

Хотелось бы иметь простой доступ к списку методов некоторых сервисов и передаваемых в них параметров не заглядывая в документацию.
Конечно, из любого контроллера можно обратиться к стандартному сервису через переменную с соответствующим названием $this->tag, $this->url, автодополнение срабатывает как положено в любом нормальном IDE. Как настроить автодополнение для phalconphp для Netbeans?
Но в случае использования своих сервисов IDE уже молчит. Да и возникает необходимость обращаться как к своим, так и к стандартным сервисам phalcon не только из контроллеров.
В моделях возникает необходимость добавить методы получения данных из соответствующих таблиц, в случаях, когда критерии выборки из таблицы сложные, в этом случае неправильно пихать такой код в контроллер, тем более, когда получаем эти данные с такими критериями в нескольких местах одного, а то и нескольких контроллеров. При этом может возникнуть необходимость обратиться к методам сервисов: базы данных, acl.
К примеру, надо получить список задач:
проверяем, чтобы ответственный за выполнение задачи или постановщик совпадал с ИД текущего пользователя или он входил в список наблюдателей задачи;
обнуляем поля таблицы, для просмотра которых пользователей не имеет прав (обусловлено использованием dataTables — данные передаются по аякс и в данных должны присутствовать все столбцы).
Получается — из модели мы как минимум должны обратиться к методам сервисов auth (предпочитаю использовать отдельный сервис для данных пользователя, который умеет инициализироваться по ключу из кук, запомнить авторизацию в куках и забыть при выходе) и acl (\Phalcon\Acl\Adapter), в некоторых случаях еще возникает необходимость вызвать методы адаптера базы данных (\Phalcon\Db\Adapter\Pdo) или модель-менеджера (\Phalcon\Mvc\Model\Manager).
Можно, конечно, воспользоваться конструкцией вида:

\Phalcon\DI::getDefault()->getModelManager()
\Phalcon\DI::getDefault()->getAuth()
# или 
\Phalcon\DI::getDefault()->get('modelManager')
\Phalcon\DI::getDefault()->get('auth')

Но, вот незадача — в обоих случаях уже надо будет лезть в документацию, чтобы узнать точное название нужного метода и порядок передаваемых параметров. А хотелось бы, чтобы IDE сразу выдало подсказку для всех возможных методов.
Для начала: я предпочитаю при инициализации сервисов объявить глобальную функцию getDi():

/**
 * @return \Phalcon\DI\FactoryDefault
 */
function getDi() {
	static $di = null;
	if (!$di) {
		$di = new \Phalcon\DI\FactoryDefault();
	}
	return $di;
}

потому как не люблю лишнего нагромождения кода, которое создаст использование конструкции \Phalcon\DI::getDefault().
Далее, создаем папочку в проекте, к примеру my-phalcon.
И копируем туда phalcon-devtools\ide\{номер версии}\Phalcon\DI.php.
Вносим нужные изменения в этот файлик — добавляем вызов недостающих там сервисов:

namespace Phalcon {
	...
	class DI implements \Phalcon\DiInterface {
		...
		/**
		 * @return \Phalcon\Security
		 */
		public function getSecurity() {}
		/**
		 * @return \Handy\Models\Auth
		 */
		public function getAuth() {}
		/**
		 * @return \Phalcon\Acl\Adapter\Memory
		 */
		public function getAcl() {}
		/**
		 * @return \Phalcon\Db\Adapter\Pdo\Mysql
		 */
		public function getDb() {}
		/**
		 * @return \Phalcon\Tag
		 */
		public function getTag() {}
		...
		# ваши сервисы
		...

И, вуаля: автозавершение для всех доступных методов, всех нужных сервисов работает!
my-phalcon-di

Как умудряются работать в phpStorm?

phpstormЭто какой-то капец, всего два дня и я на нее устаю плеваться, какая версия бы не вышла: 4, 5, 6, 7, 7.2, 7.3.
До этого всегда вылезала одна проблема — после какого-то очередного сохранения мышкой курсор устанавливался в одно место, а печатал я совершенно в другом, не там, где мигал курсор — это был взрыв мозга! После пары таких случаев и перезагрузки программы, после которой на короткое время становилось лучше, я эту хрень сносил к ебеням и продолжал пользоваться NetBeans.
Тут вышла phpstorm 8.0 — решил я попробовать: система у меня свежеустановленная, ну может, думаю, на этот раз пойму прелести этой разрекламированной повсюду IDE. Ан нет, на второй день работа в ней сделалась невозможной.
Напечатал < ?php и не смог напечатать обыкновенный пробел, что угодно нажимай — печатает, а пробел — нет.
Стираешь — эта сволочь отказалась печатать > после знака вопроса.
Короче я решительно отказываюсь понимать, с какого вообще черта эта недоIDE вообще популярная и платная.
Снес эту пакость к снова хренам и пjльзуюсь дальше NetBeans. Пусть нет у нее пары плюшек шторма, но работает она без глюков. С этим же штормом я бывало не знал что делать, при отмене-возврате действий и попытке стереть-напечатать файл корежило все больше и было совершенно непонятно: если тупо убить процесс — можно ли будет восстановить открытые файлы или надо будет все печатать заново. К моей радости обычно все оказывалось чуть менее, чем кошмарно, портилось, но с возможностью восстановления в разумные сроки.
Так что следующая версия, которую я попробую — будет 9, и то, предварительно все забэкапив на независимом сервере.

puntoswitcher стал кошмарно работать

Screenshot_4Давно пользуюсь puntoswitcher. При запрете переключения по нажатию на Tab и Enter и добавления нескольких правил его работа меня полностью устраивала. Читать далее puntoswitcher стал кошмарно работать

Замена по регулярному выражению в Notepad++

Сходу и не поймешь как в строке замены дать указание найденных вхождений. Официальная документация %programms%/Notepad++/user.manual/documentation/notepad-user-manual/searching/replacing.html ничего не проясняет по этому поводу. Методом гугления вопрос прояснился, но призодится перебрать кучу мусора.

Для вставки найденных вхождений в строке замены надо использовать последовательность символов \1, \2, \3 … Соответственно номеру найденного вхождения, начиная с единицы.
К примеру:

Find what: ([^\t]+)\t([^\t]*) 

Replace with: '\2'\t=> '\1',\n

Сформирует из текстовых данных разделенных табуляцией, пригодный для дальнейшего применения массив, и при этом поменяет ключом станут данные из второго столбца, а значениями — из первого.