emacsメモその2・undo/redo編

他サイトとの交流も無くひっそり運営してるつもりだったこのサイトにもぼちぼち検索から飛んでくる人が増えてきました。
っていうか「emacs」関連の検索でくる人がちらほらいるようで、その割にはたいした情報提供してねぇなあっていうのがemacs関連でよく検索する身としてはちょっぴりアレな気分だったので定期的になんか書こうと思う。
例によって興味ない人はスルー推奨・上級者のツッコミ歓迎。

 ***

さてタイトルに書いてますundo/redoです。
emacsのundoってすげーわかりにくいんですよ。いやわかってしまえばむしろ便利なんでしょうけど。一般のWindowsアプリのundoのつもりで使ってると混乱するんですよ。

具体的には「undo:ひとつ前のコマンドを取り消す」なんですが、「undo」自体もコマンドと認識されるので、undoコマンドでundoをundoできるっていう(※連続してundoしてるかぎりは直前のundoがundoされることはない)。つまり一般的なアプリでいうところのredoをundoコマンドひとつでやってしまうっていう。慣れたら便利だけど慣れないときもい。

そんな癖のあるundoですが、個人的に非常に重宝してるのは、リージョン(選択範囲)内のテキストのみに対するundoができるという点。これ地味に便利。
「ある場所の編集してて、別の部分の編集して、やっぱりはじめに編集したとこ元に戻したい(けど今編集したところは戻したくない)」っていうときにはじめに編集したとこ選択してundoすると選択範囲内の変更に対してのみundoできる。これ他のエディタではあんまり見ない(私が知らんだけかもしれませんが)。
もちろんあんまり大幅な変更があったとこを戻そうとするとおかしなことになったりもしますが、日常の実用程度には十分使えます。べんりー。

ところでemacsのマニュアルとか解説書見るとundoは「C-x u」か「C-_」って書いてあることが多いけど実は「C-/」でもできるよね。っていうのを昔は知らなくて「連続して押すのめんどいんだよ!」って思ってました。
環境とかキーボードとかによって推奨されてなかったりするんだろうか…?

 ***

ちなみに「いやもうよくわからんから普通にredoコマンドくれや」っていう人には、redo.el てのがあるらしい。私は使ったことないので詳細は知りませんが。