Як вирішити проблеми з Emacs?


21

У ситуації, коли Emacs веде себе не так, як я хочу, що я можу зробити, щоб усунути проблему? Які кроки я можу зробити, щоб знайти та вирішити проблему самостійно?

Або, якщо цього не зробити, як я можу зібрати корисну інформацію, щоб люди, які перебувають тут (або у списку розсилки чи інших форумах), могли допомогти мені у вирішенні моєї проблеми?

Мій Emacs включає багато пакунків, колекцію фрагментів, які копіюють та вставляють (або вбивають і потягують) з усього Інтернету, і власний користувальницький програму Elisp, яку я не пригадую, чи більше не розумію. Чи є спосіб зрозуміти всі ці ускладнення?


Не впевнений, що це найкраще місце для цього, але є багато питань, які отримують відповіді / коментарі emacs -Qз першим кроком. Я написав це як щось, щоб пов’язати ці питання як загальну допомогу для нових користувачів.
Тайлер

Так, це найкраще місце для цього. Власне, таке питання було запропоновано (майже) 2 роки тому: meta.emacs.stackexchange.com/q/198/184 Дякую!
Т. Веррон

Відповіді:


28

Крок 1: біг emacs -Q

Перше, що вам потрібно зробити, це запустити emacs без будь-яких налаштувань. Якщо ви зможете відтворити проблему у ванільному Emacs, це насправді може бути помилка в самому Emacs. Це рідко, але ми виключаємо це як перший крок.

Якщо ви запустите Emacs з командного рядка з -Qпрапором, тобто, emacs -Qви отримаєте голий або 'vanilla' emacs, не завантажуючи жодного з ваших локальних налаштувань. Чи все-таки виникає ваша проблема? Якщо так, перейдіть до пункту "Надання рецепту помилок".

Крок 1b: що робити, якщо проблема з пакетом?

Якщо ваша проблема стосується конкретного пакету, очевидно, ви не можете його відтворити, не завантажуючи цей пакет. Але ви хочете завантажити лише відповідний пакет, а не всю конфігурацію. Для цього запустіть 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

  1. Відкрийте звичайні emacs emacs, без -Qможливості.
  2. Відкрийте свій конфігураційний файл (як правило, ~/.emacsабо .emacs.d/init.el, якщо ви не можете його спробувати C-h v user-init-file)
  3. Виберіть першу половину файлу: C-spaceщоб встановити позначку, прокрутіть наполовину, щоб розширити область
  4. Прокоментуйте вибраний регіон: M-;і збережіть файл
  5. Відкрийте новий emacs (ваш тестовий emacs ), залишивши перший emacs запущеним. test emacs прочитає зменшену версію вашого конфігурації.
  6. Спробуйте відтворити проблему в тестових emacs
  7. Якщо ви не можете його відтворити, закрийте тестові emacs , а в оригіналі emacs undo- коментар C-/, і прокоментуйте половину коду, що залишився. Відкрийте новий тестовий emacs і повторіть спробу.
  8. Якщо ви можете відтворити проблему, прокоментуйте половину коду, що залишився, і подивіться, чи проблема не зникає.
  9. Повторіть цей процес, поки не знайдете найменший біт своєї конфігурації, необхідний для відтворення проблеми.

Якщо ваша проблема пов’язана з певним пакетом, вам, звичайно, доведеться залишити код, який завантажує цей пакет, без коментарів.

Якщо ваш конфігураційний файл завантажує інші файли, ви можете в кінцевому підсумку розширити пошук і на ці файли.

На даний момент ви, можливо, виявили, що проблема пов’язана лише з рядком або двома кодами. Ви навіть можете самі це виправити. Якщо так, вітаю, ви щось дізналися! В іншому випадку перейдіть до третього кроку.

Крок 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
версії 3.1415


1 Пакет помилок Hunter може допомогти вам у цьому ((напів-) автоматично розділяє ваш файл init.


Можливо, ви могли б згадати The Hunter Hunter .
Омар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.