« 誤字脱字パッチ制作スケジュールに関しまして | TOP | しょーとしょーと »

[tech][lisp][xyzzy][text] めどい。

■注
以下(|)をエディタのカーソル位置という前提で。
以下本文。

最近、こんな感じのテキストを作る機会が多いのです。

[名前]
「てまままままま、てままままままま」

とか

[名前]「てまままままま、てままままままま」

のような形式。

で。
よくあるのが、「」の中のセリフをそっくり修正したいケース。

(|)←カーソル位置です
[名前]「てまままままま、てままままままま」

という場合は、カーソルを下に1回、カーソルを右に6回押して、しかもデリートキーを16回押こんな面倒なことできるかこの×××野郎!と我慢のきかない現代っ子らしくふて寝という美しい流れに。

このままでは偉大なるヤスイリオスケ先生のマンガを手に、「むひょー!」と笑顔になる仕事にシフトし、ビタイチ作業が進まないので対策を考えることに。

延々と5分ほど思案した結果、以下のスクリプトを記述することに決定。

;; 「」の中を削除する
( defun kill-in-kakko-words()
( interactive )
; 関数内で使用する引数の定義
; 「のひとつ右の位置をポイント
( goto-bol )
( search-forward "「" )
( forward-char )
( setq p1 (point) )
; 」のひとつ左の位置をポイント
( search-forward "」" )
( setq p2 (point) )
;選択範囲を削除
( delete-region p1 p2 )
)
(global-set-key '(#\C-c #\[ #\]) 'kill-in-kakko-words)

このスクリプトを実行すると、

--- 実行前
(|)←カーソル位置です
[名前]「てまままままま、てままままままま」

--- 実行後
[名前]「(|)」

のように、次の「」の中のテキストを消して、カーソルを「」の中に移動できる。
「てまままままま、(|)てままままままま」の場合でも「」の中をクリアできてしあわせに。

ほんのちょっとでもスクリプトをかじったことがある人なら、失笑モノな単純スクリプトですが、効果的なワンライナーは人を幸せにするのです。たぶん、きっと。

で。

おまけで「」間移動スクリプトを。

;; 次の「の中へ移動する
( defun jump-to-in-next-kakko()
( interactive )
( goto-bol )
( search-forward "「" )
( forward-char )
( search-forward "「" )
( forward-char )
)
(global-set-key #\M-[ 'jump-to-in-next-kakko)

;; 前の「の中へ移動する
( defun jump-to-in-prev-kakko()
( interactive )
( goto-bol )
( search-backward "「" )
( forward-char )
)
(global-set-key #\C-M-[ 'jump-to-in-prev-kakko)

--- 実行前
[名前]「てまままま(|)まま、てままままままま」
(次のセリフまで数行あるとお考えください)
[名前]「この×××野郎!」

--- 実行後
[名前]「てまままままま、てままままままま」
(次のセリフまで数行あるとお考えください)
[名前]「(|)この×××野郎!」

と、セリフの間を移動できて、前後の調整するときにちょっと幸せに。

xyzzyはlispで拡張できるけれど、この手のテキストを造る人は秀丸やらWZやらを使っているケースが多いかと思うので、たまにはマクロ拡張のことを思い出してあげてください、というお話。

トラックバック

このエントリーのトラックバックURL:
http://genocidekiss.sakura.ne.jp/mt/mt-tb.cgi/186

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)