LINUX.ORG.RU

Победить emacs

 , ,


1

2

В который раз пытаюсь настроить себе удобный emacs. И каждый раз что-нибудь отваливается. В эту попытку — auto-complete.

Сначала я вытягиваю use-package с гита и подключаю репозитории MELPA и Marmalade.

Потом с помощью use-package настриваю и ставлю (с помощью :ensure) evil-mode, FlyCheck и auto-complete.

(use-package evil
  :ensure evil
  :config (progn
	    (evil-mode t)
	    )
  )

(use-package auto-complete
  :ensure t
  :config (setq global-auto-complete-mode t)
  )

(use-package flycheck
  :ensure t
  :ensure flycheck-haskell
  :ensure flycheck-ghcmod
  :config (add-hook 'after-init-hook 'global-flycheck-mode)
  )

Всё хорошо подхватывается, кроме автоматического запуска auto-complete.

Тут можно найти весь init.el.

Как можно решить эту проблему?

UPD: Вспомнил ещё одну проблемку: как заставить linum-mode иметь одинаковую ширину в normal- и inster-modeevil)? Вот так это выглядит сейчас: insert-mode, normal-mode.

P.S. Посоветуйте годные *-mode для Haskell.


а ты elisp-то понимаешь или копипастишь как неродивый?

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

Скорее копипастчу, чем понимаю.

Что пишу, примерно понимаю, но вряд ли сам бы написал полноценный конфиг.

P.S. У человека, чей конфиг я использовал, всё работает.

vanzef ()

автокомплете-моде ещё и настраивать надо
и вообще щас считается, что правильно юзать company-mode

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

чем company-mode лучше auto-complete

мейтейнит русский человек, а не япошка вот такая примерно настройка для auto-complete

(with-eval-after-load "auto-complete-autoloads"
    (require 'auto-complete)
    (require 'auto-complete-config)
    ;;(add-to-list 'ac-dictionary-directories (concat my/-conf-path "auto-complete/dict"))
    ;;(require 'auto-complete-clang)
    ;;(require 'go-autocomplete)
    (ac-config-default)
    (setq clang-completion-suppress-error t
          ac-clang-flags (mapcar #'(lambda (item)(concat "-I" item))
                                 (c-get-system-includes)))

    (global-auto-complete-mode t)           ;enable global-mode
    (setq ac-auto-start 2                ;automatically start (disabled)
          ac-dwim t                        ;Do what i mean
          ac-override-local-map nil        ;don't override local map
          ac-use-quick-help nil ac-quick-help-delay 1.5
          ac-use-menu-map t ac-auto-show-menu 0.5
          ac-ignore-case t ac-delay 0.5 ac-use-fuzzy t ac-use-comphist t)
    (custom-set-variables
     '(ac-sources
       '(;;ac-source-filename
         ac-source-files-in-current-dir ;;ac-source-words-in-buffer
         ac-source-words-in-same-mode-buffers
         ;;ac-source-yasnippet ac-source-words-in-all-buffer ac-source-gtags
         ;;ac-source-imenu ac-source-abbrev ac-source-semantic
         ;;ac-source-semantic-raw ac-source-ropemacs ac-source-symbols
         )))

    (dolist (hook '(emacs-lisp-mode-hook inferior-emacs-lisp-mode
                                         lisp-mode-hook lisp-interaction-mode-hook))
      (add-hook hook #'(lambda () (add-to-list 'ac-sources 'ac-source-symbols))))
    (add-hook 'haskell-mode-hook #'(lambda () (add-to-list 'ac-sources 'ac-source-haskell)))
    (add-hook 'c-mode-common-hook #'(lambda ()
                                      ;;(setq ac-sources '(ac-source-clang ac-source-yasnippet))
                                      (add-to-list 'ac-sources 'ac-source-clang)
                                      ;;(setq ac-sources '(ac-source-semantic))
                                      ))
    (ac-flyspell-workaround))

Такая для company

(with-eval-after-load "company-autoloads"
  (global-company-mode 1)

  (setq company-tooltip-limit 20
        company-minimum-prefix-length 1
        company-echo-delay 0
        company-begin-commands '(self-insert-command
                                 c-electric-lt-gt c-electric-colon
                                 completion-separator-self-insert-command)
        company-idle-delay 0.2
        company-show-numbers t))

И нефиг пользовать всякое use-package, когда есть втроенный емаксовый пакетный менеджер.

(setq package-archives '(;; ("ELPA" . "http://tromey.com/elpa/")
                         ;; ("GNU/ELPA" . "http://elpa.gnu.org/packages/")
                         ("MELPA" . "http://melpa.org/packages/")))
(when (< emacs-major-version 24)
  (add-to-list 'package-archives '("GNU/ELPA" . "http://elpa.gnu.org/packages/")))

Потом package-list-packages и ставишь какие нужно, а в конфиге пишешь для настройки

(with-eval-after-load "package-name-autoloads"
  ;...тут твои настройки)

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

Я его поставил. Такой вопрос: это нормально, что через некоторое время, как я введу :ensure company-mode, emacs, без каких-либо указаний делает eval-buffer?

Почему company-mode не хочет принудительно делать автокомплит по tab (т.е. не показывает варианты комплита), а делает это сам, через некоторое время?

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

через некоторое время, как я введу :ensure company-mode, emacs, без каких-либо указаний делает eval-buffer?

куда? чо введёшь?

Почему company-mode не хочет принудительно делать автокомплит по tab

как настроишь так и будет.(должна быть переменная, которая управляет автопоказом вариантов, а чтобы показывать варианты по табу — надо забиндить на таб company-complete или какая там функция)

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

Bad_ptr ★★★★ ()
Последнее исправление: Bad_ptr (всего исправлений: 2)
Ответ на: комментарий от vanzef

делает это сам

вот эта переменная вроде company-minimum-prefix-length

автокомплит по tab

а тут посмотри на company-begin-commands

Bad_ptr ★★★★ ()
Последнее исправление: Bad_ptr (всего исправлений: 1)

P.S. Посоветуйте годные *-mode для Haskell.

Кроме structured-haskell-mode, ничего интересного.

iVS ★★★★★ ()
Последнее исправление: iVS (всего исправлений: 1)

Добавляешь реп мельпа.

Далее package-list-packages, устанавливаешь нужные пакеты и настраиваешь так, как там написано.

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

Спасибо, начинаю понимать смысл вашего конфига.

vanzef ()
Ответ на: комментарий от Freyr69

настраиваешь так, как там написано

Там — это где?

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

Кликаешь на название пакета, всплывает буфер с кнопкой ``инсталл" и некоторым комментарием, в котором обычно описана базовая настройка.

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

И нефиг пользовать всякое use-package, когда есть втроенный емаксовый пакетный менеджер.

Да ладно, я вот руками что-то такое накостылял только для конкретно моей конфигурации, а тут готовое решение.

This is particularly useful if you share your .emacs among several machines; the relevant packages are download automatically once declared in your .emacs

Нужно.

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

1. Используй use-package. Он удобен. Только разберись как его надо использовать, а не тупо копипасти все подряд.

2. auto-complete не нужен, правильно сказали, используй company-mode.

3. > UPD: Вспомнил ещё одну проблемку: как заставить linum-mode иметь одинаковую ширину в normal- и inster-mode (в evil)? Вот так это выглядит сейчас: insert-mode, normal-mode.

Попробуй поковыряться с linum-format (пример):
(setq linum-format " %3d")

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

Ты меня с топикстартером перепутал? :]

UPD: Вспомнил ещё одну проблемку: как заставить linum-mode иметь одинаковую ширину в normal- и inster-mode (в evil)? Вот так это выглядит сейчас: insert-mode, normal-mode.

Это про linum-relative?

Алсо, линум вообще не оч: Emacs. face в точке

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

Ты меня с топикстартером перепутал? :]

Да, прошу прощения :)

И да, мне linum тоже не нравится. Не, оно, конечно, работает, но выглядит кривовато.
Кстати, раз уж речь зашла о linum'е: как вырубить linum в mini-buffer'ах (не уверен, что они точно так называются). Например, вызываешь helm-mini, появляется этот мини-буффер снизу. Вот в нем как выключить linum?
Пробовал через minibuffer-setup-hook - почему-то не работает.

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

Например, вызываешь helm-mini, появляется этот мини-буффер снизу. Вот в нем как выключить linum?
Пробовал через minibuffer-setup-hook - почему-то не работает.

Так скорее всего там и не минибуфер используется, а просто окно. Так что ищи какой-нить хук с именем helm-**-hook и туда ставь.

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

Да я уж все перепробовал. Ничего не работает :(

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

А какие есть альтернативы linum-relative?

Возможно вы знаете, как в evil сделать онтносительный переход по строкам, т.е. 4g сделает переход не на 4-ую строку всего файла, а на 4-ую строку относительно текущей позиции курсора?

Тогда это решит мою проблему)

vanzef ()
Ответ на: комментарий от Bad_ptr

Решил вот так:

(use-package linum
  :config (progn
            (defun linum-on () (linum-mode 1))
            (add-hook 'prog-mode-hook #'linum-on)
            (add-hook 'text-mode-hook #'linum-on)))

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

Возможно вы знаете, как в evil сделать онтносительный переход по строкам, т.е. 4g сделает переход не на 4-ую строку всего файла, а на 4-ую строку относительно текущей позиции курсора?

Эммм... 4j / 4k, не?

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

Действительно, как-то я упустил это, когда пользовался vim'ом.

vanzef ()
Ответ на: комментарий от Bad_ptr

мейтейнит русский человек, а не япошка

ксенофобия зашкаливает прямо.

Нормальный автокомплит. Настроек больше и умеет гораздо больше. Тем более листинги твои делают немного разные вещи.

И нефиг пользовать всякое use-package, когда есть втроенный емаксовый пакетный менеджер.

Ну тут уже на вкус и цвет, имхо.

Есть неплохой el-get, который умеет работать вообще со всем.

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

ксенофобия зашкаливает прямо.

да это я так, пошутил)
В своё время auto-complete-mode был лучшим автокомплитом. Потом почему-то мнение сообщества сместилось в пользу company-mode(и соответственно его сейчас всюду пихают и везде поддерживают), я помню для себя что у меня емакс падал однажды от включения auto-complete-mode:) (а так, там говорят и ещё какие-то баги есть) тут ещё можно почитать https://github.com/company-mode/company-mode/issues/68#issuecomment-36208504 .

Ну тут уже на вкус и цвет, имхо.

ну да, но не люблю я лишние зависимости и развесистые либы, которые делают то, что можно парой строк сделать при помощи встроенных функций(тем более что большинство нужных модулей лежат в MELPA, а если не лежат — никто не мешает добавить).

Bad_ptr ★★★★ ()
Последнее исправление: Bad_ptr (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.