変更後に.emacsをリロードするにはどうすればよいですか?


375

Emacsを再.emacs起動せずに、更新したすべての定義をEmacsに再ロードさせるにはどうすればよいですか?


18
emacsは多くの場合OSと見なされていますが、... s / reboot / restart /?
ウィリアムパーセル2010

6
私は開発者ではないので、開発者にとってすぐに理解できる答えの多くは、私にはそれほど意味がない
Yazz.com

4
@MJBスタックオーバーフローの目的は、最も基本的な質問の知識リポジトリであることです。この質問は、スタックオーバーフローの目的に完全に適合します。stackoverflow.com/faqを
chollida


10
5年後の今、提案された「最初のGoogle検索」がここをリードしています。nice
JimLohse

回答:


350

コマンドload-fileを使用できます(M-x load-file次に、returnキーを2回押して、編集中の現在のファイルであるデフォルトのファイル名を受け入れます)。

また、ポイントを任意のsexpの最後に移動し、を押しC-xC-eてそのsexpのみを実行することもできます。通常、1行または2行を変更するだけの場合は、ファイル全体を再ロードする必要はありません。


22
これは必ずしもあなたが思っているとおりに動作するとは限らないことに注意してください。内容が反転している変数がある場合(つまり、ブール値を反対に設定している場合)、動作はファイルのロードと同じではありません。
Chollida

4
一般的な副作用は、ファイルの読み込みなど、望ましい動作を損なう可能性があります
vemv

これを行うと、次のメッセージが表示されます。load-with-code-conversion:変数のシンボルの値はvoid:n
Chris Marie

2
defunまたはの後ろにポイントを移動する代わりにdefvar、宣言本体の中に置いてタイプすることもできますC-M-x。とても便利な。
トーマス

151

とても不思議でとても便利

M-x eval-buffer

ここでは触れません。

べき.emacs等である場合は、バッファ内のすべてのコードをすぐに評価します。これが最も速い方法です。


3
誰がそれ.emacsがべき等である(またはそうでなければならない)と言うのですか?
マイク

@mike:私じゃない。「a、bがtrueの場合」、「a、bがtrueの場合」が私にとっての意味ですが、あなたの言っていることがわかります。より明確にするためにifに変更しました。
Peter

7
@mike:.emacsべき等にならないのはいつ意味が ありますか?
Zaz

これが最初の提案だと思ったでしょう。
ストライカー

1
いいスタイルとは言えませんが、そうなるかもしれません。たとえば、関数がすでに定義されている場合(最初の起動時から)、関数を再定義しないことを選択できます。initファイルを評価するときに、定義の変更が表示されない場合があります。
Kaligule 2017年

43

通常は、変更されたリージョンを再評価できます。変更した〜/ .emacsの領域をマークし、を使用しますM-x eval-region RET。.emacsファイルを2回ロードした後で正しく機能しない場合は簡単に作成できるため、ファイル全体を再評価するよりも安全です。


2
面白い。私は、べき等ではない.emacsファイルのアイデアを考慮していませんでした。ELispから始める際に注意すること
エリック

2
少なくとも2つの実行で1つの実行とまったく同じ状態になるという強い意味で、べき等である.emacsファイルを見つけることはまれだと思います。少なくとも、さまざまなリストに追加することはごく一般的ですが、2回目に実行したときに重複したエントリが抑制されないことがよくあります。
Dale Hagglund、2012

1
もう1つの考え:上記で提案したアプローチを使用すると、取得したemacsの状態が.emacsの実際の状態と異なる可能性があります。つまり、白紙の状態から.emacsファイル全体を実行していないため、実際にそれが望んでいることを知りません。
Dale Hagglund、2012

1
そうは言っても、.emacsをべき等の方法で書くことは可能ではないでしょうか?グローバルな状態は厄介です。
Ehtesh Choudhury

39

現在アクティブなバッファーで.emacsファイルを開いている場合:

mx eval-buffer

12
ここで注意しなければならないことの1つは、これを実行して、再起動のアプローチと同じ状態になるわけでないことです。(不自然な例:.emacsに「トグル」の影響があった場合)。
luapyad

28
M-x load-file
~/.emacs

1
これを行うと、Windows 7のインストールで、.emacs.dフォルダーがユーザーのホームフォルダーではなく%appdata%フォルダーにあることがわかりました。
Bassdrop Cumberwubwubwub


13

解決

M-: (load user-init-file)


ノート

  • Eval:プロンプトに入力します(括弧を含む)
  • user-init-file~/.emacsデフォルトで値(構成ファイルのパスを指す)を保持する変数 です。
  • (load)は、より短く、より古く、非インタラクティブなバージョンです(load-file)。emacsコマンド(で入力M-x)ではなく、単なるelisp関数です。

結論

M-: > M-x


M-:> Ctrl Alt x?私の想像するロジックに基づいてM-:<CMx initファイルの1行のみが変更された場合?多分それはちょうど==です
ロバート・ホートン

12

他の人はすでに述べたようにあなたの質問にすでに答えましたが、私は通常、私が書いたばかりの行を実行したいと思っています。そのためCtrlAltx、lispではうまく機能します。


3
参照してくださいeval-lastsexpでは、C-x C-e
デレク・Slager

ではC-M-x、「Lispの終わり」にいる必要はありC-x C-eません- おそらく考えていますか?良いC-M-x点は、ポイントが関数/変数の宣言の途中であっても呼び出すことができることです。
トーマス

Cx Ceしか使っていなかった頃に、lispの最後に行く癖があったのでしょう。キャッチありがとう!
バーバー、2015年

9

最初はこれを行わないことをお勧めします。代わりに、新しいemacsセッションを開始し、行った変更をテストして、正しく機能するかどうかを確認します。このようにする理由は、操作に失敗した.emacsファイルがロードされない、または正常にロードされない状態になることを避けるためです。すべての編集を元のセッションで行い、すべてのテストを新しいセッションで行う場合、問題のあるコードをコメントアウトするための信頼できるものが常にあります。

最終的に変更に満足したら、先に進み、他の回答の1つを使用して再ロードします。私の個人的な好みは、eval追加/変更したセクションだけで、追加/変更したコードの領域を強調表示してを呼び出すことM-x eval-regionです。これにより、評価されるコードが最小限に抑えられ、luapyadが指摘するように、意図しない副作用が最小限に抑えられます。


9

キーボードショートカット:

(defun reload-init-file ()
  (interactive)
  (load-file user-init-file))

(global-set-key (kbd "C-c C-l") 'reload-init-file)    ; Reload .emacs file

鮮やかさ!これはとてもいい!
PinkCollins

7
C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el

4

私は現在Ubuntu 15.04を使用しています。このためのキーを定義するのが好きです。
[M-挿入]は私のキーボードではalt-挿入に変換されます。
これを.emacsファイルに入れます:

(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))

3

それをあなたのinitファイルで定義し、Mx reload-user-init-fileで呼び出します

(defun reload-user-init-file()
  (interactive)
  (load-file user-init-file))

2

M-x eval-buffer動作します、あなたはトグルや他の類似のものの問題に実行することがあります。より良いアプローチは、.emacsの新しいものを「マーク」またはハイライトすることです(または、いじりをしている場合は、スクラッチバッファーを使用します)M-x eval-region。お役に立てれば。


2

これは、設定をすばやくテストするためのすばやく簡単な方法です。C-x C-e特定のlispの最後に使用して、特定の機能を個別に実行することもできます。

Cx Ceは、対話型のコンパイルされたLisp関数であるコマンドeval-last-sexp(global-mapにあります)を実行します。

Cx Ceにバインドされています。

(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)

ポイントの前にsexpを評価します。エコー領域に値を出力します。対話的に、前置引数を付けて、出力を現在のバッファに出力します。

通常、この関数は変数「eval-expression-print-length」および「eval-expression-print-level」の値に従って長い出力を切り捨てます。ただし、前置引数がゼロの場合、そのような切り捨てはありません。このような前置引数により、整数はいくつかの追加フォーマット(8進数、16進数、および文字)で出力されます。

'eval-expression-debug-on-error'がデフォルトの非nilの場合、このコマンドはすべてのエラーがデバッガーに入るように調整します。


2

以下のようなコマンドの横にはMx evalのバッファまたはのMxロード・ファイルは、コマンドラインからの新鮮なのemacsを再起動することができます。

emacs -q --load "init.el"

使用例stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/


Emacsを再起動せずにこれを行う方法を質問します。新しいコピーを立ち上げることは、技術的には質問に答えているが、質問の精神に合わないようだ。😄
chwarr

0

このようにemacsのキーバインドを設定できます

;; reload emacs configuration
(defun reload-init-file ()
  (interactive)
  (load-file "~/.emacs"))

(global-set-key (kbd "C-c r") 'reload-init-file) 

これが役立つことを願っています!


-2

Emacs内でシェルを開いている場合は、次のようにすることもできます。

. ~/.emacs

いくつかのキーストロークを節約できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.