はじめに
- ファイル編集において昔は「漢は黙って正規表現で一発置換!」とか今は「AIに編集してもらえればいいじゃん」と思いつつも、頭を使わず指先で解決させることが多いです
- vなんとかエディタのほうが得意な領域かもですが、dmacroやmultiple-cursors+phi-searchの使い心地には及ばないんじゃないかと思ってます
-
dmacroは再実行マクロ(1993〜! Masuiさん!
)で、multiple-cursorsは複数カーソル編集(2012〜)
つまり:
- 繰り返しの編集を自動検出 して再実行したり、
- 複数カーソルで 同時に複数箇所を編集 するのは、
- VSなんとかエディタ(2015〜)がない時代は Emacs一択 でした
dmacro (再実行マクロ)
(package-install 'dmacro)
(defconst *dmacro-key* "\C-t" "繰返し指定キー")
(global-set-key *dmacro-key* 'dmacro-exec)
(autoload 'dmacro-exec "dmacro" nil t)
同じような操作をしてると思ったら C-t を連打
multiple-cursors (複数カーソル)
(package-install 'multiple-cursors)
(package-install 'phi-search)
(setq mc/always-run-for-all t)
(global-set-key (kbd "C-S-n") 'mc/mark-next-like-this)
(global-set-key (kbd "C-S-p") 'mc/unmark-next-like-this)
(global-set-key (kbd "C-S-m") 'mc/mark-all-words-like-this)
(global-set-key (kbd "C->") 'mc/mark-all-like-this-dwim)
実際 C-S-n しか使ってないです。
例えば上記ソースで mc/ を編集したい時はC-S-nを4回打ってカーソルを増やして、C-sでmc/を探すといい感じな場所で編集できます。
矩形選択とかまったく使わなくなりました。
他の小ネタ
move-text (行移動)
(package-install 'move-text)
(global-set-key (kbd "M-N") 'move-text-down)
(global-set-key (kbd "M-P") 'move-text-up)
move-textは行移動のパッケージですが、全然使ってないですね。。
wgrep / wgrep-ag (grep結果を直接編集)
(package-install 'wgrep)
(require 'wgrep)
(add-hook 'grep-mode-hook
'(lambda ()
(define-key grep-mode-map "r" 'wgrep-change-to-wgrep-mode)))
(package-install 'ag)
(package-install 'wgrep-ag)
(autoload 'wgrep-ag-setup "wgrep-ag")
(add-hook 'ag-mode-hook 'wgrep-ag-setup)
(add-hook 'ag-mode-hook
'(lambda ()
(define-key ag-mode-map "r" 'wgrep-change-to-wgrep-mode)))
-
M-x grepやM-x agで検索 - 検索結果バッファで
rを押す - 検索結果を普通のバッファとして編集
-
C-c C-cで変更を全ファイルに反映
いわゆる、複数ファイルへの文字列置換で、昔はこれを使うぐらいだったら Perl や sed を使ってましたし、AI時代ではめっきり出番がなくなっていますが、いざという時は頼りになります。
indent-and-next-line
(defun indent-and-next-line ()
(interactive)
(indent-according-to-mode)
(next-line 1))
(global-set-key "\M-n" 'indent-and-next-line)
現在行をインデントしながら次行へ移動をM-nの連打が体に染み付きすぎて、本当に他の環境でファイルを編集したくないです。
hungry-delete
;;(package-install 'hungry-delete)
バックスペースや削除キーで 空白をまとめて削除できるらしい!が、標準キーの M-\ (カーソル前後の空白を削除)を越えられなくて使ってない。
zop-to-char
(package-install 'zop-to-char)
(global-unset-key (kbd "C-z"))
(global-set-key (kbd "C-z") 'zop-to-char)
C-z 文字 で、指定した文字まで削除できる!なんかすごそうでいれたけどまったく使っていない
まとめ
やはり、たまに無理矢理でも記事を書こうとすることで(LLM頼りではありつつも)、自分の設定を見直すことができてよいですね。
Emacsは常に昔から、そして今でも最先端の編集環境であることに、興味を持った方はぜひ試してみてください ![]()