以前の回答で、Aristotle Pagaltzis は次のように書いています。
vi だけを 10 年以上使用した後、Emacs に切り替えました。最初は、「Vim では、通常の編集過程で、Emacs でスクリプトを作成する必要があるようなことを簡単に実行できる」という主張に同意したでしょう。しかしその後、Emacs のマクロ機能と大量の繰り返し回数を使用することで、vi によって簡単になったほとんどすべてのことを Emacs で簡単に実行できることを発見しました。
Emacs のマクロ機能には、次の 3 つのコマンドが含まれます。
C-x ( start remembering keystrokes
C-x ) stop remembering keystrokes
C-x e replay the remembered keystrokes
たとえば、vi<a>
で HTML ファイル内のすべてのタグを検索してtarget
属性を追加したい場合、次のようにします。
:g/^<a/s/>/ target="_blank">/
<a>
この例は、すべてのタグが単独で 1 行に並んでいることを前提としているため、完全ではありません。しかし、2 つの異なるエディターで同等のタスクを達成する方法を説明するには十分です。
emacs で同じ効果を簡単に実現するために、次のようにします。
1. C-x (
2. M-C-s <a\>
3. C-b
4. C-s >
5. C-b
6. target="_blank"
7. C-x )
8. C-u 10000 C-x e
上記の各キーストロークの動作の説明は次のとおりです。
1. start remembering keystrokes
2. regex search for <a. Note that the "\>" after the "a" is not HTML. It's emacs regex notation for end-of-word.
3. back up one character - as a side-effect this gets you out of search mode
4. search for the next ">"
5. back up over the ">"
6. enter space as an attribute-delimiter followed by the target="_blank" attribute
7. stop remembering keystrokes
8. replay the remembered keystrokes 10,000 times or until the search fails
複雑に見えますが、実際に入力するのはとても簡単です。そして、このアプローチを使用して、Lisp コードに落ち込むことなく、vi ではできない多くのことを行うことができます。