Emacs. Light PHP IDE

Как известно, про возможности emacs в сети интернета информации достаточно, но вот найти какие-либо подробные инструкции по настройке данных возможностей сложновато.

В одной из своих статей в своем блоге Ben Simon поделился рецептом настройки Emacs под PHP - Emacs + PHP - A Modern and (Far More Complete) Recipe. Я решил проверить этот рецепт на деле. Как оказалось, рецепт действенный.

1. Установка MELPA
MELPA - это репозиторий различных по функциональности пакетов, которые Вы можете устанавливать в свой редактор. Для этого перейдите в настройку пакетов

M-x customize-group RET package

В окне настроек перейдите в раздел Package Archives и укажите репозиторий
с именем "melpa" и URL адресом "http://melpa.org/packages"

 

Нажатием State сохраняем для последующих сессий

2. Установка режима PHP Mode

Для этого перейдите в список доступных пакетов

M-x list-packages

Перед выдачей полного списка Emacs обратиться в прописанные репозитории, в частности - MELPA, и подгрузит список пакетов


Здесь стоит отметить, что если у Вас стоит прокси, то пакеты могут не подгрузиться, для этого
необходимо в config-файле (~/.emacs) прописать следующую команду

(setq url-proxy-services
       '(("no_proxy" . "^\\(localhost\\|10.*\\)")
         ("http" . "proxy_address:proxy_port")
         ("https" . "proxy_address:proxy_port")))

Далее среди списка найдите пакет php-mode (Для быстроты воспользуйтесь командой C-s)


Далее нажмите RET находясь на строке и выполните установку данного пакета.
Можно установить пакет и иначе, для это достаточно выполнить

M-x package-install RET php-mode

3. Установка Web-Mode.el

Во время веб разработки порой приходиться работать с html, css и javascript на уровне одного исходника, то не совсем правильно использовать режим php-mode. Для этого случая предлагается использовать режим web-mode

M-x package-install RET web-mode

4. Добавление автоматического переключения между режимами php-mode и web-mode

Так как каждый из этих режимов имеет свои нюансы, то удобнее назначить shirt-cat
для переключения этих режимов. Хотя можно оставить все как есть и в мини-буфере задавать
текущий режим нажатием M-x php-mode или M-x web-mode.
Для реализации shirt-cat можно воспользоваться следующим кодом

(defun toggle-php-flavor-mode ()
  (interactive)
  "Toggle mode between PHP & Web-Mode Helper modes"
  (cond ((string= mode-name "PHP")
         (web-mode))
        ((string= mode-name "Web")
         (php-mode))))

(global-set-key [f5] 'toggle-php-flavor-mode)

Теперь при нажатии F5 мы будем автоматически переключать данные режимы

5. Настройка авто-дополнения

Для этого воспользуемся пакетом ac-php, который поддерживает дополнение функций и классов. Данный пакет устанавливается из репозитория MELPA, но перед этим необходимо проверить доступность php через командную строку, например так

php --version

Помимо этого необходимо установить cscope. Для unix-систем все очень просто (см. README ac-php), для windows его необходимо отдельно скачать по ссылке, установить и проверить доступность утилиты в командной строке. Иначе пропишите в переменных средах (Компьютер -> Свойства -> Изменить параметры -> Дополнительно -> Переменные среды)


После этого установите пакет ac-php по аналогии с предыдущими пакетами.
Далее, как сказано в инструкции, добавьте код (в Ваш config-файл)

(add-hook 'php-mode-hook
          '(lambda ()
             (require 'company-php)
             (company-mode t)
             (ac-php-core-eldoc-setup) ;; enable eldoc
             (make-local-variable 'company-backends)
             (add-to-list 'company-backends 'company-ac-php-backend)))

Далее создайте файл .ac-php-conf.json в корне Вашего проекта и наберите команду

M-x ac-php-remake-tags-all

Все готово.

Emacs. Proxy

In your emacs config file (~/.emacs) write next command:

(setq url-proxy-services
       '(("no_proxy" . "^\\(localhost\\|10.*\\)")
         ("http" . "proxy_address:proxy_port")
         ("https" . "proxy_address:proxy_port")))

Emacs Hotkeys

FILE
OpenCtrl-X, Ctrl-F 
SaveCtrl-X, Ctrl-S 
Save AsCtrl-X, Ctrl-W 
Save AllCtrl-X, S 
Revert to FileCtrl-X, Ctrl-V 
Revert BufferMeta-X, revert-buffer 
ExitCtrl-X, Ctrl-C 
EDIT
UndoCtrl-_ 
PasteCtrl-Y 
Begin SelectionCtrl-SPC 
DeleteDEL 
Fwd DeleteCtrl-D 
Delete WordMeta-DEL 
Fwd Delete WordMeta-D 
Delete LineCtrl-K 
Delete SelectionCtrl-W 
CURSOR MOVEMENT
 FORWARDBACKWARD
WordMeta-FMeta-B
LineCtrl-ACtrl-E
ParagraphMeta-
PageCtrl-VMeta-V
DocumentMeta-<Meta->
FunctionMeta-Ctrl-AMeta-Control-E
SEARCH
Incremental SearchCtrl-S 
Incremental Search ReverseCtrl-R 
Regexp Inc SearchMeta-Ctrl-S 
Regexp Inc Search ReverseMeta-Ctrl-R 
Interactive Search and ReplaceMeta-% 
Goto Line NumberMeta-X goto-line 
WINDOW
CloseCtrl-X, K 
Next WindowCtrl-X, B 
Choose WindowCtrl-X, Ctrl-B 
MaximizeCtrl-X, 1 
Split HorizontalCtrl-X, 2 
Split VerticalCtrl-X, 3 
Switch Keyboard FocusCtrl-X, O 
Activate Menu BarMeta-` 
REGISTERS
Copy Selection to Names RegisterCtrl-X R S 
Paste Names RegisterCtrl-X R I 
Set BookmarkCtrl-X R SPC 
Jump to BookmarkCtrl-X R J 
FORMATTING
Re-flow ParagraphMeta-Q 
Indent SelectionMeta-Control-\ 
Uppercase WordMeta-U 
Lowercase WordMeta-L 
Capitalize WordMeta-C 
Uppercase SelectionCtrl-X, Ctrl-U 
Lowercase SelectionCtrl-X, Ctrl-L 
MACROS
Start RecordingCtrl-X, ( 
Stop RecordingCtrl-X, ) 
Play MacroCtrl-X, E