ステップ1:実行中 emacs -Q
最初に行う必要があるのは、カスタマイズなしでemacsを実行することです。バニラEmacsで問題を再現できる場合、それは実際にはEmacs自体のバグかもしれません。それはまれですが、最初のステップとしてそれを除外します。
Emacsを-Q
フラグ付きでコマンドラインから起動すると、つまり、emacs -Q
ローカルのカスタマイズが読み込まれずに、裸または「バニラ」の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
- オプション
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を開き、再試行してください。
- 問題を再現できる場合は、残りのコードの半分をコメント化して、問題が解決するかどうかを確認してください。
- 問題を再現するために必要な構成の最小ビットが見つかるまで、このプロセスを繰り返します。
特定のパッケージに問題がある場合は、もちろん、そのパッケージをロードするコードのコメントを外しておく必要があります。
構成ファイルが他のファイルをロードする場合、それらのファイルにも検索を拡張することになります。
この時点で、問題は1行または2行のコードによるものであることがわかりました。自分で修正することもできます。もしそうなら、おめでとう、あなたは何かを学んだ!それ以外の場合は、手順3に進みます。
ステップ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
これによりスーパーコンパイラが呼び出され、プログラムがコンパイルされると予想されます。代わりに、ミニバッファーに「PayPalからスーパーモードの作成者に$ 100が転送されました」というメッセージが表示されます
GNU Emacs 25.1.50.3
Debian Linux
スーパーモードバージョン3.1415
1 バグハンターのパッケージには、これであなたを助けるかもしれない(半)自動的に初期化ファイルを二等分します。
emacs -Q
。これは、これらの質問を新しいユーザーの一般的なヘルプとしてリンクするものとして書きました。