[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やらを使っているケースが多いかと思うので、たまにはマクロ拡張のことを思い出してあげてください、というお話。