変数名のリファクタリングを行う必要がある場合は、agとmultiple-cursorsを使用します。
しかし、コードブロックの削除/追加/移動を行う必要がある場合は、キーボードマクロを使用します。しかし、各バッファに切り替えて、手動でマクロの実行を開始する必要があります。
Ibufferから開いているバッファー(またはdiredからファイル)を単純に選択し、最後に記録されたキーボードマクロをそれらすべてに対して実行する方法はありますか?
変数名のリファクタリングを行う必要がある場合は、agとmultiple-cursorsを使用します。
しかし、コードブロックの削除/追加/移動を行う必要がある場合は、キーボードマクロを使用します。しかし、各バッファに切り替えて、手動でマクロの実行を開始する必要があります。
Ibufferから開いているバッファー(またはdiredからファイル)を単純に選択し、最後に記録されたキーボードマクロをそれらすべてに対して実行する方法はありますか?
回答:
マクロにバッファ切り替えを含めるだけです。あなたは単一のバッファに制限されていません-キーボードマクロはあなたができることなら何でもできます!
私は先日、SOでこの同じ質問にかなり答えました。emacsのクロスファイルキーボードマクロを参照してください。
t
を切り替えk
たり、マークされたエントリを削除したりできます。その後のg
更新では、削除された行が復元されます。
M-{
しM-}
て、Ibuffer内の次および前のマークされたアイテムにジャンプしてdiredできます。
以下は、複数のファイルでコマンド、マクロ、およびLisp式を評価することを簡単にするコマンドです。前置引数を使用すると、エラーが発生するまで各ファイルのマクロを実行できます。これはすでにスーパーユーザーに投稿しましたが、うまく機能しているため、このページにアクセスした人にも役立つと思いました。これをdiredで「E」にバインドするのが好きです。
更新:この関数の古いバージョンはマクロのみをサポートしていました。更新されたものはよりシンプルでより強力であり、(キーシーケンスまたは名前によって)任意のコマンドやLisp式を実行できます。また、メッセージバッファにエラーを記録するように注意しています。
;; Inspired by M-x edit-kbd-macro and https://superuser.com/q/176627.
(defun my-dired-do-execute (keys &optional arg)
"Execute a command in all marked files.
If an error occurs, execution in other files is not affected.
(Notably, this allows to run keyboard macros until there is an error.)
At the prompt, type any bound key sequence, or `\\[execute-extended-command]'
to choose a command by its name, or `\\[eval-expression]' to enter a Lisp expression.
The prefix ARG, if given, is passed on to the chosen command.
"
(interactive
(list (read-key-sequence (substitute-command-keys "Key sequence to execute, \
or \\[eval-expression], or \\[execute-extended-command]: "))
current-prefix-arg))
(when keys
(let ((cmd (if (arrayp keys) (key-binding keys) keys))
exp)
(cond ((eq cmd 'execute-extended-command)
(setq cmd (read-command "Name of command to execute: "))
(if (string-equal cmd "")
(error "No command name given")))
((eq cmd 'eval-expression)
(setq exp (read--expression "Eval in selected files: "))
(setq cmd nil))
((null cmd)
(error "Key sequence %s is not defined" (key-description keys))))
(mapc (lambda (filename)
(save-selected-window
(find-file-other-window filename)
(setq current-prefix-arg arg)
(condition-case-unless-debug err
(if cmd
(call-interactively cmd)
(message "Result in file %s:" filename)
(eval-expression exp))
(error (message "In file %s: %S" filename err)))))
(dired-get-marked-files)))))
dired
以下のソリューションdired+
では、Melpaで入手可能なパッケージのインストールが必要です。
まず、キーボードマクロをelisp関数に変換します。これが関連するemacs.SE QnA(キーボードマクロをLisp関数として保存する方法?)です。
elisp関数を直接使用してすべてのファイルを変更する方法を知っていると、さらに速くなります。diredで選択したすべてのファイルの先頭に「-*-mode:org-*-」を追加するとします。1
その場合、選択した各ファイルで以下のelisp関数を実行すると機能します。
(defun my/set-org-mode ()
(goto-char (point-min))
(insert "-*- mode: org -*-\n"))
したがって、今のところ上記の関数を評価してください。後のステップで使用するようになります。
M-x dired
上記の関数を実行するファイルを含むディレクトリを開いてください。m
キーを使用して、そのようなファイルをすべてマークします(にバインドさdired-mark
れていますdired
)。C-u @
ステップ1(my/set-org-mode
)で評価した関数の名前を選択します。@
にdiredp-do-apply-function
定義されているにバインドされていdired+.el
ます。C-x s !
すべてのファイルを一度に保存できます。1:redditに関するこの質問に触発されました。