LINUX.ORG.RU

Как настроить AC(Autocomplete) и company-mode, ac-html в Emacs 24?

 , , ,


0

2

Добрый день, ЛОР, добрый день, форумчане. Вопросов будет несколько, постараюсь обьяснить попонятнее.

В работе использую Emacs, сейчас занимаюсь веб-разработкой.Редактор настроен неплохо, однако не хватает автодополнения в PHP и HTML. Погуглив, увидел, что есть отдельные пакеты ac-php и ac-html, однако с их настройкой вот что-то трудности: AC включил global-mode, однако, как я понял, он просто считывает во временный словарь все слова из открытых буферов(я слышал, что можно просто закинуть словари и как-то их прописать), а потом предлагает(в Lisp все работает из коробки, проблема с PHP и HTML). company-mode настроить и вовсе не вышло... Кто занимался или знает, что делать, прошу помочь с конфигурацией(сильно не пинайте за, возможно, глупые вопросы). Заранее благодарю!)

ПыСы: еще бы получить плюшки sgml пакета, а то я как им пробовал пользоваться, он чет отступы ломает(а так надо, надо бы, клевая штука)

ПыПыСы: В общем, нужен автокомплит PHP и HTML, желательно в сочетании с web-mode..



Последнее исправление: sudoLife (всего исправлений: 3)

Вместо ac попробуй company-mode. Для css здорово пригодится rainbow-mode, потому что умеет автоматом подсвечивать описания цветов как например #99FF33, и подобные штуки.

Hertz ★★★★★
()
Ответ на: комментарий от Hertz

да, попытки настроить ac-php и навели меня на company-mode. Сейчас поправлю.

sudoLife
() автор топика
Ответ на: комментарий от sudoLife

примерно так,только у меня для с++ :

(require 'company)
(require 'cc-mode)

(setq
 helm-gtags-ignore-case t
 helm-gtags-auto-update t
 helm-gtags-use-input-at-cursor t
 helm-gtags-pulse-at-cursor t
 helm-gtags-prefix-key "\C-cg"
 helm-gtags-suggested-key-mapping t
 )
(require 'helm-gtags)
(define-key helm-gtags-mode-map (kbd "C-c g a") 'helm-gtags-tags-in-this-function)
(define-key helm-gtags-mode-map (kbd "C-j") 'helm-gtags-select)
(define-key helm-gtags-mode-map (kbd "M-.") 'helm-gtags-dwim)
(define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack)
(define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
(define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-histor)
(add-hook 'after-init-hook 'global-company-mode)
(setq company-backends (delete 'company-semantic company-backends))
; вот этот блок надо перестроить под свой язык
(add-hook 'c-mode-hook 'helm-gtags-mode)
(add-hook 'c++-mode-hook 'helm-gtags-mode)
(add-hook 'asm-mode-hook 'helm-gtags-mode)
(add-hook 'c++-mode-hook 'ggtags-mode)
(add-hook 'asm-mode-hook 'ggtags-mode)
(add-hook 'c-mode-hook 'linum-mode)
(add-hook 'c++-mode-hook 'linum-mode)
(add-hook 'asm-mode-hook 'linum-mode)
(add-hook 'lisp-mode-hook 'linum-mode)
(add-hook 'c++-mode-hook 'modern-c++-font-lock-mode)
; вот этот блок надо перестроить под свой язык
(define-key c-mode-map  [(control return)] 'company-complete)
(define-key c++-mode-map  [(control return)] 'company-complete)
(define-key lisp-mode-map  [(control return)] 'company-complete)
(global-set-key  [(control return)] 'company-complete)
(add-to-list 'company-backends 'company-c-headers)

Silerus ★★★★
()
Ответ на: комментарий от Silerus

это конец....

Это, кажется, мне проще настроить AutoComplete, там нужно научиться подключать словари для определенных режимов. Знаете, как? (Ваш конфиг мозг взрывает просто)

sudoLife
() автор топика

Для php не подскажу, а для html настоятельно рекомендую посмотреть в сторону emmet-mode. Кроме того, company умеет автодополнять по сниппетам yasnippet. Для html такие есть.

feofan ★★★★★
()
Ответ на: комментарий от sudoLife

тут все просто,поверьте бывает куда хуже. И я со своим нулевым лисп уровнем там тону только в путь, сейчас дам коментарии к каждой строке

(require 'company) ;подключаем и подгужаем company
(require 'cc-mode); это нужно для работы с/с++ - вам не нужно
;вот здесь даем настройки для helm-gtags (gtags - позволяет создавать словарь для проекта, и быстро по нему перемещаться)
(setq
 helm-gtags-ignore-case t
 helm-gtags-auto-update t
 helm-gtags-use-input-at-cursor t
 helm-gtags-pulse-at-cursor t
 helm-gtags-prefix-key "\C-cg"
 helm-gtags-suggested-key-mapping t
 )
;тут биндим клавиши для gtags
(require 'helm-gtags); подключаем и подгружаем helm-gtags
(define-key helm-gtags-mode-map (kbd "C-c g a") 'helm-gtags-tags-in-this-function) 
(define-key helm-gtags-mode-map (kbd "C-j") 'helm-gtags-select)
(define-key helm-gtags-mode-map (kbd "M-.") 'helm-gtags-dwim)
(define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack)
(define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
(define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-histor)
;nen сообщаем что после инициализации должен запустится глобальный режим company
(add-hook 'after-init-hook 'global-company-mode)
(setq company-backends (delete 'company-semantic company-backends))
;тут я подгружаю дополнительные режимы если открыт с/с++ ассемблерный или lisp файл (ggtag, helm-ggtags( управление ggtags),linum-mode - нумерация строк)
; вот этот блок надо перестроить под свой язык
(add-hook 'c-mode-hook 'helm-gtags-mode)
(add-hook 'c++-mode-hook 'helm-gtags-mode)
(add-hook 'asm-mode-hook 'helm-gtags-mode)
(add-hook 'c++-mode-hook 'ggtags-mode)
(add-hook 'asm-mode-hook 'ggtags-mode)
(add-hook 'c-mode-hook 'linum-mode)
(add-hook 'c++-mode-hook 'linum-mode)
(add-hook 'asm-mode-hook 'linum-mode)
(add-hook 'lisp-mode-hook 'linum-mode)
(add-hook 'c++-mode-hook 'modern-c++-font-lock-mode)
;биндю на ctrl+enter автодополнение
; вот этот блок надо перестроить под свой язык
(define-key c-mode-map  [(control return)] 'company-complete)
(define-key c++-mode-map  [(control return)] 'company-complete)
(define-key lisp-mode-map  [(control return)] 'company-complete)
(global-set-key  [(control return)] 'company-complete)
(add-to-list 'company-backends 'company-c-headers)

Silerus ★★★★
()
Ответ на: комментарий от Silerus

Мудрено как все, боюсь, я вас только зря мучить буду, поэтому посмотрите, пожалуйста, вот это: Тык! и, если удастся, подскажите, что делать)

sudoLife
() автор топика
Ответ на: комментарий от sudoLife

так это и есть по чему я в свое время свой конфиг составлял, естественно выкидывая или добавляя вот эта строка

(add-hook 'after-init-hook 'global-company-mode)
-главное

Silerus ★★★★
()
Ответ на: комментарий от Silerus

проблема еще в том, что я даже не нашел в melpa company-mode, его нет в репозиториях melpa и elpa... Чет сложный ваш company, не компанейский...Али я тупой)

sudoLife
() автор топика
Ответ на: комментарий от feofan

я плохой человек, искал «company-mode»

(add-hook 'php-mode-hook
         '(lambda ()
            (require 'company-php)
            (company-mode t)
            (add-to-list 'company-backends 'company-ac-php-backend )))
Вот это указано в описании к пакету company-php. Получается, можно заменить php-mode-hook на web-mode-hook, но так не работает. Может вот тут что-то не так: (add-to-list 'company-backends 'company-ac-php-backend )

sudoLife
() автор топика
Ответ на: комментарий от feofan

Мне все больше кажется, что такой обширный инструмент мне пока не по силам и не очень-то нужен. Осталось понять, как присобачить словарь с php выражениями к AC(autocomplete) и заставить его включать их в web-mode.

sudoLife
() автор топика
Ответ на: комментарий от sudoLife

Во-первых, не вешай на хуки лямбды - сделай именованную функцию. Если выполнить этот кусок кода три раза, то при каждом открытии файла php всё, что внутри лямбды, выполнится трижды. После пары десятков можно открыть файл и идти пить кофе. Лямбды будут добавляться каждый раз, а именованная функция будет каждый раз подменяться.

Во-вторых, я не уверен, что company-php умеет работать с web-mode и вообще с чем-то кроме php-mode. И не очень стремлюсь это выяснить. company-web смотрел? Там есть пример настройки.

feofan ★★★★★
()
Ответ на: комментарий от feofan

в company-web Только для html есть автокомплит. Что насчет лямбд и функций лиспа, я в них не силен, это копипаста с мануала.

sudoLife
() автор топика
Ответ на: комментарий от sudoLife

в company-web Только для html есть автокомплит.

В крайнем случае company умеет дополнять по тэгам - company-gtags & company-etags входят в стандартную поставку company. Что такое тэги и как их генерировать гугли уже сам - подсказка.

feofan ★★★★★
()
Последнее исправление: feofan (всего исправлений: 1)
Ответ на: комментарий от Silerus

Блин, чего ж так все сложно... Мне нужно просто найти, как подключить файл со словарем в autocomplete и ассоциировать его с php(даже это необязательно)...

sudoLife
() автор топика
Ответ на: комментарий от sudoLife

у autocomplete - был баг, из-за чего я в свое время отказался от него, он составляет базу дополнений, и потом могут быть казусы - кусок кода удален, а он все его добавить пытается. На самом деле не все так страшно, но уровень вхождения не маленький. Но конфиг составляется один раз и больше не трогается обычно

Silerus ★★★★
()
Ответ на: комментарий от Silerus

Дико извиняюсь, но мне бы конкретики.. Обычно почти на все есть мануал, а здесь косяк на баге. Ладно, буду завтра пытаться)

sudoLife
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.