Шаг 1: бег emacs -Q
Первое, что вам нужно сделать, это запустить emacs без каких-либо настроек. Если вы можете воспроизвести проблему в ванильном Emacs, это может быть ошибка в самом Emacs. Это редко, но мы исключаем это как первый шаг.
Если вы запустите Emacs из командной строки с -Q
флагом, т. Е. emacs -Q
Вы получите чистый или «ванильный» emacs без загруженных локальных настроек. Ваша проблема все еще возникает? Если это так, перейдите к «Предоставление рецепта ошибки».
Шаг 1б: что если проблема с пакетом?
Если ваша проблема связана с конкретным пакетом, то, очевидно, вы не сможете воспроизвести его без загрузки этого пакета. Но вы хотите загрузить только соответствующий пакет, а не всю вашу конфигурацию. Для этого emacs -Q
снова запустите и подготовьте короткий скрипт, такой как следующий:
(require 'package)
(setq package-load-list
'((package1 t)))
(package-initialize)
Замените package1
на имя пакета, который вы хотите загрузить. Если вам нужно загрузить несколько пакетов, измените скрипт соответствующим образом:
(require 'package)
(setq package-load-list
'((package1 t)
(package2 t)
(package3 t)))
(package-initialize)
Чтобы загрузить этот код, вы можете вставить его в *scratch*
буфер и вызвать M-x eval-buffer
. (или любой буфер, если в нем нет другого кода!).
На данный момент вы загрузили пакет (ы) и только те пакеты, которые вы тестируете. Если вы можете воспроизвести проблему сейчас, перейдите к разделу «Предоставление рецепта ошибки».
Шаг 2: Нахождение ошибки в вашем .emacs
Теперь вы подтвердили, что проблема связана с чем-то в вашей конфигурации («звонок поступает из дома!»). Ваша конфигурация может быть длиной в несколько тысяч строк и может загружать много разных файлов. Чтобы найти проблему, вы выполните бинарный поиск, закомментируя половину кода за раз, чтобы сузить круг. 1
- Откройте свой обычный emacs
emacs
, без -Q
опции.
- Откройте файл конфигурации (обычно
~/.emacs
или .emacs.d/init.el
, если вы не можете найти его, попробуйте C-h v user-init-file
)
- Выберите первую половину файла:
C-space
чтобы установить метку, прокрутите вниз наполовину, чтобы расширить область
- Закомментируйте выбранный регион:
M-;
и сохраните файл
- Откройте новый
emacs
(ваш тестовый emacs ), оставив первый запущенный emacs. Тест Emacs будет читать сокращенную версию вашего конфига.
- Попробуйте воспроизвести проблему в тесте Emacs
- Если вы не можете воспроизвести его, закройте тестовый emacs , а в исходном emacs
undo
оставьте комментарий C-/
и закомментируйте половину оставшегося кода. Откройте новый тестовый emacs и попробуйте снова.
- Если вы можете воспроизвести проблему, закомментируйте половину оставшегося кода и посмотрите, сохраняется ли проблема.
- Повторяйте этот процесс, пока не найдете наименьший бит вашей конфигурации, необходимый для воспроизведения проблемы.
Если ваша проблема связана с конкретным пакетом, вам, конечно, придется оставить код, загружающий этот пакет, без комментариев.
Если ваш конфигурационный файл загружает другие файлы, вы можете расширить поиск и на эти файлы.
В этот момент вы, возможно, обнаружили, что проблема связана с одной или двумя строками кода. Вы можете даже быть в состоянии исправить это самостоятельно. Если так, поздравляю, вы чему-то научились! В противном случае перейдите к третьему шагу.
Шаг 3: Предоставление рецепта ошибки
На данный момент, вы должны быть в состоянии предоставить подробный рецепт ошибки, чтобы опубликовать здесь. Он должен включать в себя:
- Ваша версия Emacs (вы можете получить это из Emacs с
M-x emacs-version
- Ваша операционная система (Windows #, Mac, дистрибутив Linux)
- Версия пакета, с которым вы боретесь, если применимо
- Конкретные шаги, необходимые для демонстрации проблемы, в том числе то, что вы ожидаете , и что на самом деле происходит .
Например, я мог бы опубликовать такой вопрос:
У меня проблема с супер-режимом. Когда я использую M-x sm-compile-code
, он снимает деньги со своего счета PayPal.
Действия по воспроизведению:
Загрузить супер-режим:
(require 'package)
(setq package-load-list
'((super-mode t)))
(package-initialize)
- открыть новый файл с
C-x C-f my-code
- введите строку кода:
10 goto 10
- вызов
M-x sm-compile-code
Я ожидаю, что это вызовет суперкомпилятор и скомпилирует мою программу. Вместо этого я вижу в минибуфере сообщение «100 долларов переведено с PayPal на автора суперрежима»
GNU Emacs 25.1.50.3
Debian Linux
Super-mode версия 3.1415
1 Пакет Bug Hunter может помочь вам (полу) автоматически разделить ваш файл инициализации.
emacs -Q
в качестве первого шага. Я написал это как нечто, связывающее эти вопросы с общей справкой для новых пользователей.