load-fileのキーバインド作った

キーバインドで一発再読み込みができるものがどこかにあるだろうと思ったらどこにもなかったから作ってみた。load-fileだから使う人がいるのか微妙。eval-bufferバージョンはエラーが出るから、いつかはエラーを解決して作りたいと思う。たまに動いてくれないときがあるかも。

やり方(その1)

↓のコードをinit.elとか、.emacsなどの貼りたい場所に貼る。

(define-key global-map (kbd "C-8")
  (lambda ()
    (interactive)
    (save-buffer)
     (load-file buffer-file-name)
    (message "load %S succeeded!" (current-buffer))))

貼りつけた後は、C-x C-s保存 (← 「Ctrl+x を押して、 Ctrl+sを押す」)

M-x load-file RET RET (←「RET」 は エンターキーのこと。 )


何かエラーが出ずに読み込めればctrl+8で使用することができます。

load-fileはバッファのファイル名を入れない場合(「エンターキーを2回)だとカレントバッファを読み込みます。現在、選択中のバッファがカレントバッファです。読み込みたいバッファをクリックで選択しておかないとエンターキー二回で読み込めません。

キーバインドは「Ctrl+8」とやってますが、これはどこに設定すればいいかわからなかったためとりあえずこうしてます(汗)これに至るまでにcurrent-bufferとかeval-bufferとかやったけどうまくいかなかった。

save-bufferを入れなくてもいいけど、毎回保存したほうが終了するとき「保存しますか?」と聞かれずに済むと思ったので入れた。

やり方(その2)

diskで作ったほうが、対応できる状況が多いからそっちを導入すると幸せになれるかも。
install-elispが入っている前提で書くと、

M-x install-elisp-from-emacswiki RET

disk と入力してdisk.elをクリック

(disk.elバッファ内で)C-c C-C

インストール完了後、↓のコードをinit.elとか、.emacsとか貼りたい場所に貼る。

(require 'disk)

(define-key global-map (kbd "C-8")
  (lambda ()
    (interactive)
    (disk)
    (load-file buffer-file-name)
    (message "load %S succeeded!" (current-buffer))))

保存しようとしたらいろいろ聞いてくるのがめんどくさいので,入れないほうがいいと思う。

調べた関数

save-buffer; buffer-file-nameがなくてもカレントバッファをセーブしてくれる様子。

disk; これはファイルを開く/保存/読み込み直しを現在のファイルの状況に応じて選択してくれるありがたい機能を持った関数。 install-elisp-from-emacswikiから使えるやつで
・現在のファイルが編集中→保存
・保存されたファイルが変更された→読み込み直し
・ファイルを編集中で保存されたファイルも変更された→警告
・ファイルバッファ以外→ファイルを開く
ということができます。

eval-buffer; これが入ったキーバインド作って実行したら、Invalid functionが出てキーバインドの中に組み込めない。どういうことなの?

buffer-file-name 何も設定しなければカレントバッファの絶対パスを返してくれる。

message; エコー領域に文字列を表示してくれます。引数がformat関数の「~S」と違い、「%S」などで引数を取ります。

load-path; current-bufferでバッファの名前入れたらダメだった。これはバッファのパスじゃないと悪いみたいだ。