Krok 1: bieganie emacs -Q
Pierwszą rzeczą, którą musisz zrobić, to uruchomić emacsa bez żadnych dostosowań. Jeśli możesz odtworzyć problem w waniliowym Emacsie, może to być błąd w samym Emacsie. To rzadkie, ale wykluczamy to jako pierwszy krok.
Jeśli uruchomisz Emacsa z wiersza poleceń z -Q
flagą, tzn. emacs -Q
Dostaniesz goły lub „waniliowy” emacs, bez załadowania żadnych lokalnych dostosowań. Czy Twój problem nadal występuje? Jeśli tak, przejdź do „Zapewnienia przepisu na błąd”.
Krok 1b: Co jeśli problem dotyczy pakietu?
Jeśli twój problem dotyczy konkretnego pakietu, to oczywiście nie możesz go odtworzyć bez załadowania tego pakietu. Ale chcesz załadować tylko odpowiedni pakiet, a nie całą konfigurację. Aby to zrobić, uruchom emacs -Q
ponownie i przygotuj krótki skrypt, taki jak:
(require 'package)
(setq package-load-list
'((package1 t)))
(package-initialize)
Zamień package1
na nazwę pakietu, który chcesz załadować. Jeśli musisz załadować wiele pakietów, odpowiednio zmodyfikuj skrypt:
(require 'package)
(setq package-load-list
'((package1 t)
(package2 t)
(package3 t)))
(package-initialize)
Aby załadować ten kod, możesz go wkleić do *scratch*
bufora i wywołać M-x eval-buffer
. (lub dowolny bufor, o ile nie ma w nim żadnego innego kodu!).
W tym momencie załadowałeś pakiety, a tylko pakiety, które testujesz. Jeśli możesz teraz odtworzyć problem, przejdź do „Zapewnianie przepisu na błąd”.
Krok 2: Znalezienie błędu w twoim .emacs
Potwierdziłeś, że problem pochodzi z czegoś w twojej konfiguracji („połączenie przychodzi z domu!”). Twoja konfiguracja może mieć wiele tysięcy linii i może ładować wiele różnych plików. Aby znaleźć problem, przeszukujesz dane binarne, komentując połowę kodu na raz, aby zawęzić listę. 1
- Otwórz swoje zwykłe emacsy
emacs
, bez -Q
opcji.
- Otwórz plik konfiguracyjny (zwykle
~/.emacs
lub .emacs.d/init.el
, jeśli nie możesz go znaleźć, spróbuj C-h v user-init-file
)
- Wybierz pierwszą połowę pliku:
C-space
aby ustawić znak, przewiń w dół do połowy, aby rozszerzyć region
- Skomentuj wybrany region:
M-;
i zapisz plik
- Otwórz nowy
emacs
( testowy emacs ), pozostawiając uruchomione pierwsze emacs. test emacs odczyta zredukowaną wersję twojej konfiguracji.
- Spróbuj odtworzyć problem w testowych emacsach
- Jeśli nie możesz go odtworzyć, zamknij test emacsa , a w oryginalnym emacs
undo
skomentuj C-/
i skomentuj połowę pozostałego kodu. Otwórz nowy emac testowy i spróbuj ponownie.
- Jeśli możesz odtworzyć problem, skomentuj połowę pozostałego kodu i sprawdź, czy problem nadal występuje.
- Powtarzaj ten proces, aż znajdziesz najmniejszy fragment konfiguracji niezbędny do odtworzenia problemu.
Jeśli twój problem dotyczy konkretnego pakietu, oczywiście musisz zostawić kod, który ładuje ten pakiet, bez komentarza.
Jeśli plik konfiguracyjny ładuje inne pliki, możesz również rozszerzyć wyszukiwanie na te pliki.
W tym momencie być może zauważyłeś, że problem wynika tylko z jednej lub dwóch linii kodu. Być może będziesz w stanie to naprawić samodzielnie. Jeśli tak, gratulacje, nauczyłeś się czegoś! W przeciwnym razie przejdź do kroku trzeciego.
Krok 3: Zapewnienie przepisu na błąd
W tym momencie powinieneś być w stanie podać szczegółowy przepis na błąd, aby opublikować tutaj. Powinien obejmować:
- Twoja wersja Emacsa (możesz to uzyskać od Emacsa za pomocą
M-x emacs-version
- Twój system operacyjny (Windows #, Mac, dystrybucja Linux)
- Wersja pakietu, z którym się zmagasz, jeśli dotyczy
- Konkretne kroki niezbędne do zademonstrowania problemu, w tym to, czego się spodziewasz i co faktycznie się stanie .
Na przykład mogę opublikować takie pytanie:
Mam problem z trybem super. Kiedy korzystam M-x sm-compile-code
, dokonuje wypłaty z mojego konta PayPal.
Kroki ku reprodukcji:
Załaduj super-tryb:
(require 'package)
(setq package-load-list
'((super-mode t)))
(package-initialize)
- otwórz nowy plik za pomocą
C-x C-f my-code
- wprowadź wiersz kodu:
10 goto 10
- połączenie
M-x sm-compile-code
Spodziewam się, że wywoła to superkompilator i skompiluje mój program. Zamiast tego widzę komunikat w minibuforze „100 $ przeniesione z paypal do autora w trybie super”
GNU Emacs 25.1.50.3
Debian Linux
Super-mode wersja 3.1415
1 Pakiet Bug Hunter może ci w tym pomóc (częściowo) automatycznie podzielony plik init.
emacs -Q
jako pierwszy krok. Napisałem to jako coś do połączenia tych pytań z ogólną pomocą dla nowych użytkowników.