:bufdoEmacs で Vim コマンドに相当するものを探しています。:bufdo引数 (別のコマンド) を取り、開いているすべてのバッファでコマンドを実行します。Emacs で同様の機能をまだ見つけていません。
3 に答える
9
コマンドの内容に応じて、次のことができます。
M-: (mapc (lambda (b) (set-buffer b) (*command*)) (buffer-list))
でも、あなたはそれほどぎこちないものを望んでいる気がします。キーボード マクロを見てください。つまり、何をしたいかを決定します。
C-x ( <do-your-command> C-x )
M-: (mapc (lambda (b) (set-buffer b) (kmacro-end-and-call-macro)) (buffer-list))
最後の部分を頻繁に使用する場合は、関数として定義することをお勧めします。
(defun bufdo ()
"execute last macro on all buffers, ala bufdo from vi"
(interactive)
(mapc (lambda (b)
(with-current-buffer b
(kmacro-end-and-call-macro)))
(buffer-list)))
注: コードはテストされていません
于 2009-05-08T05:26:21.593 に答える
6
ibufferをチェックアウトすることもできます。これにより、操作したいバッファーにマークを付けてから、でm何かを実行できますE。他の一般的な操作も利用できquery-replaceますQ。メニューまたはモードの説明(C-h m)を確認してください。
ところで、それはあなたに命令を与えていないようですが、同様のことがdiredからも可能です。eval
于 2009-05-08T07:37:36.880 に答える
2
buffer-list (関数) を見てください。開いているすべてのバッファ (BUFFER オブジェクト) のリストを返します。これを mapcar (リストのすべての要素を操作し、結果を累積する) で使用する簡単な例については、マニュアルを参照してください。おそらく、Emacs Lisp から現在のバッファーをプログラムで設定する set-buffer も便利でしょう。
于 2009-05-08T05:29:37.187 に答える