emacsで開いているすべてのバッファを

・revert-bufferする
・kill-bufferする

方法を教えてください。
.emacsに貼るelispまたは、コマンドを教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/12/14 12:47:32
  • 終了:--

回答(2件)

id:s34itl No.1

s34itl回答回数117ベストアンサー獲得回数42005/12/14 13:40:36

ポイント50pt

http://www.hatena.ne.jp/1134532052#dummy

人力検索はてな - emacsで開いているすべてのバッファを ・revert-bufferする ・kill-bufferする 方法を教えてください。 .emacsに貼るelispまたは、コマンドを教えてください。 ..

あまりきれいなコードではありませんが、どうでしょう。GNU Emacs 20.7.1では動きます。


・revert-bufferする

(dolist (buf (buffer-list))

(if (not (buffer-file-name buf));visitしているfileに限定

nil

(switch-to-buffer buf)

(revert-buffer t t)))


・kill-bufferする

(dolist (buf (buffer-list))

(kill-buffer buf))


すべてはkillできません。*scratch*と*Messages*が残ります。(いったん削除されますが、自動的に生成されます。)

id:anom

ありがとうございます。

これをコマンドとして使いたいのですがどのように.emacsに書けばよいでしょうか

2005/12/14 14:36:51
id:s34itl No.2

s34itl回答回数117ベストアンサー獲得回数42005/12/14 15:31:46

ポイント50pt

ごめんなさい、.emacsで立上げ時に実行すると勘違いしました。再回答をお許しください。


単にコマンドにするだけなら次のような関数宣言をします。(先ほどの回答はBODY部分に相当します。)


(defun FUNCTION-NAME ()

(interactive)

BODY)


以下、関数名は適当に変えてください。


(defun my-revert-buffer ()

(interactive)

(dolist (buf (buffer-list))

(if (not (buffer-file-name buf)) ;visitしているfileに限定

nil

(switch-to-buffer buf)

(revert-buffer t t))))


(defun my-kill-buffer (all)

(interactive ”P”) ;”P”はprefix argumentを受け取る宣言のひとつ

(dolist (buf (buffer-list))

(if (or all ;prefix argumentがあれば全バッファを削除

(buffer-file-name buf)) ;通常はvisitしているfileを削除

(kill-buffer buf))))


kill-bufferの方は少し変えてみました。

1. 単純に M-x my-kill-buffer だとvisited fileのバッファのみを削除します。通常はこちらがよいでしょう。

2. ctrl-U M-x my-kill-buffer のようにprefix argumentを付けると全バッファを削除しに行きます。(*scratch*と*Messages*は再生成されます。)一時的なバッファを削除したい場合は便利な場合があるかも知れません。


なお、dolistはcl(common lisp)パッケージの組込み関数です。エラーになるようなら、.emacsに (require ’cl) を追加してください。


それでもだめなら(clパッケージがインストールされていない)、dolistをやめ、例えば次のように変えてください。


(defun FUNCTION-NAME ()

(interactive)

(let ((bufs (buffer-list)))

(while bufs

(if (not (buffer-file-name (car bufs))) ;visitしているfileに限定

nil

(switch-to-buffer (car bufs))

(revert-buffer t t))

(setq bufs (cdr bufs)))))


(defun my-kill-buffer (all)

(interactive ”P”) ;”P”はprefix argumentを受け取る宣言のひとつ

(let ((bufs (buffer-list)))

(while bufs

(if (or all ;prefix argumentがあれば全バッファを削除

(buffer-file-name (car bufs))) ;通常はvisitしているfileを削除

(kill-buffer (car bufs)))

(setq bufs (cdr bufs)))))


記述例はindentionしているのですが、回答入力するとindentionがなくなりますね。コードを貼ったemacsのバッファにて、M-x emacs-lisp-mode の後、各行で <tab> または ctrl-Iを押して、indentionを復活させてください。多少見やすくなります。


私程度のemacsの知識でよろしければ、この後はいわしにて回答しますので、ご遠慮なく。

id:anom

丁寧にありがとうございます。

my-kill-bufferを実行したところ

execute-extended-command: Symbol’s value as variable is void: ”P”

とエラーが出ました。

環境は Windows XP Pro + Meadow 2.00です。

2005/12/14 17:47:08

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません