リージョンの周りにテキストを適用する必要がある状況がよくあります。HTMLおよび単純なケースの場合、これ用のライブラリがすでにあります。しかし、一般的なケースはどうですか?リージョンの最初と最後に何を挿入するか尋ねられますか。
リージョンの周りにテキストを適用する必要がある状況がよくあります。HTMLおよび単純なケースの場合、これ用のライブラリがすでにあります。しかし、一般的なケースはどうですか?リージョンの最初と最後に何を挿入するか尋ねられますか。
回答:
私はググってみて、この投稿をJohn D. Cookが見つけました。彼は、簡単なインタラクティブ関数を作成して、地域のHTML / XMLタグを簡単に取得する方法を示しています。それから私は関数を2回尋ねるように変更しました。
(defun tag-word-or-region (text-begin text-end)
"Surround current word or region with given text."
(interactive "sStart tag: \nsEnd tag: ")
(let (pos1 pos2 bds)
(if (and transient-mark-mode mark-active)
(progn
(goto-char (region-end))
(insert text-end)
(goto-char (region-beginning))
(insert text-begin))
(progn
(setq bds (bounds-of-thing-at-point 'symbol))
(goto-char (cdr bds))
(insert text-end)
(goto-char (car bds))
(insert text-begin)))))
さらに重要なことに、この関数は補助ツールとしても使用できます。たとえば、キーをバインドしてテキストの特定のビットをマップする場合などです。
(defun tag-php ()
(interactive)
(tag-word-or-region "<?php " "?>"))
evil
ここで干渉するのは私が使用しているものかもしれません。おそらく、タイプの関数はinteractive "r"
より堅牢に機能しましたか?
別のアプローチを提案します。リージョンがある場合、定義上、リージョンpoint
の先頭(または末尾)にある必要があり、リージョンmark
は末尾(または先頭)にあります。つまり、必要なときにテキストを入力し、を使用してexchange-point-and-mark
、C-x C-x
リージョンのもう一方の端にジャンプできます。ラッパーの後半を入力すれば完了です。
挿入テキストの入力を明示的に求められることはありませんが、少ない労力で同じことを達成する方法があるとは思えません。
multiple-cursors
調整して、アクティブ領域の開始と終了に同時にテキストを挿入できるかどうか疑問に思います。
C-x C-x
。あなたの答えで、あなたはあなたの関数を呼び出す必要があります(C-c something
)、そしてあなたはまたreturn
各エントリーの後にヒットする必要があります。したがって、何をしても、さらに2つのキーストロークがあります。そうは言っても、elispから何かを呼び出したい場合は役に立ちません。
多様性のためだけに:
いくつかの任意の開始と終了のテキストでこれを行うための別の方法は、使用することですreplace-regexp
域に:試合.+
とと交換before \& after
、またはあなたが使用したいものは何でもテキストbefore
とafter
。
これを行うコマンドを書くこともできますが、あるファイルで同じ開始/終了テキストを複数の場所に適用したい場合を考えています。マクロを記録するか、ミニバッファー履歴を使用して別の領域で繰り返すことができます。
もちろん、ラップするテキストが正規表現として表現できる場合は、領域を選択する必要もなくquery-replace-regexp
、バッファーでa を実行できますが、ラップするテキストは一貫性がないと考えられます。
<?php
...?>
そして、リージョンとタイプ<?php
(またはキーバインド)を選択すると、ペアでラップされます。ただし、多くのワンショットペアがある場合、これらのライブラリを使用する簡単な方法はありません。