Jak sprawić, by autouzupełnianie działało w trybie AucTeX?

11

Chcę auto-complete(ac) działać, gdy jestem w AucTeXtrybie wewnętrznym . Wszystkie pakiety otrzymuję od MELPA po instalacji pakietu.

To jest mój odpowiedni kod w init.elpliku:

(require 'package)
(package-initialize)
(require 'auto-complete-config)
(ac-config-default)   
(global-auto-complete-mode t)

jak widać, chociaż ustawiam acglobalnie, nie pojawia się AucTeX. Jednak postępując zgodnie z instrukcjami w tym emacswiki , actryb został wyświetlony na pasku stanu w, AucTeXale nie działa, brak automatycznego uzupełniania przez wpisywanie znaków.

Notes
Emacs 24.4 pod Windows 7 32bit i pakiety zostały zaktualizowane.

doktorat
źródło
Twój problem polega na tym, aby ac działał razem yasnippet lub po prostu sam, w trybie LaTex? W tym drugim przypadku używam ac z AUCTeX bez większego wysiłku.
giordano
Po pierwsze, chcę acdobrze sobie radzić auctex. Wspomniałem, yasnippetponieważ używam go również, aby mieć niektóre fragmenty zdefiniowane przez użytkownika w lateksie. Więc dopóki nie podasz kodu, nie wiem, czy yasprzeszkadzam ac.
doktorat
Ton, proszę! Spróbuj się yasnippetdowiedzieć, czy autouzupełnianie i AUCTeX działają razem, jak sugeruje @giordano. Jeśli tak, to problem dotyczy włączenia yasnippet. Jeśli tak, prawdopodobnie jest to konfiguracja autouzupełniania.
Dan
Możemy zapomnieć o tym, yasnippetże usunąłem go z mojego pliku init.el. Problem najprawdopodobniej dotyczy konfiguracji auctexi ac.
doktorat
1
Zobacz pakiet autorstwa Christophera Monsanto github.com/monsanto/auto-complete-auctex . Nie przetestowałem tego.
Imię i nazwisko

Odpowiedzi:

11

Po długich badaniach w sieci i dokładnym sprawdzeniu acdokumentacji z wieloma próbami na moim komputerze w celu zbadania kodu wiersz po wierszu, wymyśliłem to rozwiązanie, które może również yasnippetdziałać (opcjonalnie) bez żadnych konfliktów.

umieść to w swoim init.ellub .emacsdbając o sekwencję:

(require 'package)
(package-initialize)

;; yasnippet code 'optional', before auto-complete
(require 'yasnippet)
(yas-global-mode 1)

;; auto-complete setup, sequence is important
(require 'auto-complete)
(add-to-list 'ac-modes 'latex-mode) ; beware of using 'LaTeX-mode instead
(require 'ac-math) ; package should be installed first 
(defun my-ac-latex-mode () ; add ac-sources for latex
   (setq ac-sources
         (append '(ac-source-math-unicode
           ac-source-math-latex
           ac-source-latex-commands)
                 ac-sources)))
(add-hook 'LaTeX-mode-hook 'my-ac-latex-mode)
(setq ac-math-unicode-in-math-p t)
(ac-flyspell-workaround) ; fixes a known bug of delay due to flyspell (if it is there)
(add-to-list 'ac-modes 'org-mode) ; auto-complete for org-mode (optional)
(require 'auto-complete-config) ; should be after add-to-list 'ac-modes and hooks
(ac-config-default)
(setq ac-auto-start nil)            ; if t starts ac at startup automatically
(setq ac-auto-show-menu t)
(global-auto-complete-mode t) 

Uwagi:
jak podano w dokumentacji z ac, dodawanie do ac-modesi haki powinny być wykonane przed załadunkiem (ac-config-default).

Niektórzy sugerowali, aby umieścić kod do gry TABkluczem, którego nie potrzebowałem i nie polecam, ponieważ w jakiś sposób zniszczy coś innego później. Widziałem jednak, jak ludzie umieszczali na końcu coś takiego global-auto-complete:

(ac-set-trigger-key "TAB")
(ac-set-trigger-key "<tab>")  

Dopóki nie dodałem (ac-flyspell-workaround)automatycznego uzupełniania było zbyt wolne, aby myśleć o użyciu go w Auctex, ponieważ używam Flyspell. Ten błąd został również wspomniany w dokumentacji. Dzięki!

Bonus
Z przyjemnością dowiedziałem się z dokumentacji, choć nie bardzo jasne, jak można dodać słownik zdefiniowany przez użytkownika! Próbowałem tego i działałem dobrze.

dodaj te dwie linie tuż za require-auto-completelinią powyżej:

(add-to-list 'ac-dictionary-directories "~/.emacs.d/.dict") ; make sure this folder exists
(add-to-list 'ac-user-dictionary-files "~/.emacs.d/.dict/custom-dict.txt") ; put any name to your `.txt` file  

Teraz w swoim .txtpliku dodaj swoich ulubionych kandydatów do ukończenia. Ratuj się przed kandydatami o długości poniżej 4 liter, nie są tego warci! Po prostu umieść swoje podobne słowa, oddzielając je wierszem lub RET.

Przykład zawartości .txtpliku:

inconsistencies
[email protected]
do-not-put-your-password-here
long-line-in-any-programming-language-of-your-like

Korzystaj z automatycznego uzupełniania w LaTeX / AUCTeX z Emacsem!

doktorat
źródło
byłoby miło, gdyby istniała elispfunkcja wyrzucania dowolnego zaznaczonego słowa do bufora podczas pisania do tego .txtdyktatora w locie i dołączania go bez większego wysiłku!
doktorat
6

Jak powiedziałem w moim powyższym komentarzu, pakiet auto-complete-auctexmoże również rozwiązać problem. Przetestowałem oba i oba działają ładnie. Byłoby miło porównać rozwiązanie @doctorate i powyższego pakietu podając zrzuty ekranu. Jeśli piszę $\sig$, kod doktora podaje coś takiego

wprowadź opis zdjęcia tutaj

a opakowanie auto-complete-auctexdaje coś takiego

wprowadź opis zdjęcia tutaj

Dodano: Powinienem wspomnieć, że rozwiązanie @giordano również działa, tutaj zrzut ekranu:

wprowadź opis zdjęcia tutaj

Imię
źródło
Myślę, że auto-completepowinien być głównym pakietem, chociaż auto-complete-auctexmoże mieć dodatkowe funkcje. Spróbuję i zgłosię w razie potrzeby. Dzięki
doktorat
2
Zainstalowałem pakiet, ale nie mogę otworzyć wyskakującego okienka z uzupełnieniami ... Jak to zrobiłeś i czy jest tam trochę dokumentacji?
Raven
@Raven Nie jestem pewien, czy naprawdę działa. Ale jeśli dodasz w TAB kluczowe kroki, których doktorat powiedział, aby unikać, naciśnięcie TAB sprawi, że zadziała (dla mnie).
Chill2Macht
4

Oto moja auto-completepowiązana konfiguracja:

(require 'package)
(package-initialize)
(require 'auto-complete-config)
(ac-config-default)

;; Activate auto-complete for latex modes (AUCTeX or Emacs' builtin one).
(add-to-list 'ac-modes 'latex-mode)

;; Activate ac-math.
(eval-after-load "latex"
  '(when (featurep 'auto-complete)
     ;; See https://github.com/vspinu/ac-math
     (require 'ac-math)
     (defun ac-latex-mode-setup ()       ; add ac-sources to default ac-sources
       (setq ac-sources
         (append '(ac-source-math-unicode ac-source-math-latex ac-source-latex-commands)
             ac-sources)))
     (add-hook 'LaTeX-mode-hook 'ac-latex-mode-setup)))

Jak widać, nie ma nic specjalnego dla AUCTeX, jest to standardowa konfiguracja auto-complete. Konfiguracja ac-mathjest opisana na stronie internetowej. Jeśli nie używasz ac-math, jedyną sensowną różnicą w konfiguracji jest (add-to-list 'ac-modes 'latex-mode).

Giordano
źródło
-1: użyj package-initialize. Może ci się to nie podobać, ale load-pathw swoich odpowiedziach nie zalecaj złych praktyk, takich jak ręczne zarządzanie.
lunaryorn
2
@lunaryorn Nie sądzę, żebym zalecał złe praktyki, wyraźnie napisałem, że to brudny hack, aby załadować pakiet pomocniczy. W package-initializekażdym razie postaram się poprawić odpowiedź, używając później.
giordano