2010/08/26(木) [n年前の日記]
#4 [xyzzy][emacs] xyzzyで文字列を置換する際にカーソル位置の単語を取得できるのだけど、それをemacsでやりたい
xyzzy も emacs も、replace-string や query-replace で文字列を置換できるわけだけど。その際、バッファ上のカーソル位置にある単語を置換元文字列としてミニバッファ上にコピーしたいと思うわけで。
単純な置換をする場合、置換前の文字列は、既にバッファ上に存在する。ていうか。バッファ上に存在してる文字列を置換したいと思ったからこそ、置換を呼び出すわけで、実に当たり前の話。
で。既にバッファ上に文字列が存在しているのに、それを手入力で打ち込み直すなんて、実に馬鹿げている。目的とする文字列は既にバッファ上にあるのだから、そのままコピーして利用すればよろしい。となると問題は、「その文字列のコピー・貼り付け作業をどれだけ簡単に行うか」「どれだけ少ない手順で行うか」になってくる。
xyzzy なら、置換前文字列を入力する際に ―― ミニバッファ上に何かを入力しようとした際に、Homeキーを押すことで、バッファ上のカーソル位置の単語が順次ミニバッファへコピーされる。実に快適。少し調べてみたが、lisp/minibuf.l で、minibuffer-copy-word という関数が定義されていて、それが Home に割り当てられている模様。
さて、これと似たようなことを emacs でやるにはどうしたらよいのか。検索してみたが、そういう機能があるという話は見かけなかった。
一応、手作業でやれなくはない。
もう少し減らすこともできる。
単純な置換をする場合、置換前の文字列は、既にバッファ上に存在する。ていうか。バッファ上に存在してる文字列を置換したいと思ったからこそ、置換を呼び出すわけで、実に当たり前の話。
で。既にバッファ上に文字列が存在しているのに、それを手入力で打ち込み直すなんて、実に馬鹿げている。目的とする文字列は既にバッファ上にあるのだから、そのままコピーして利用すればよろしい。となると問題は、「その文字列のコピー・貼り付け作業をどれだけ簡単に行うか」「どれだけ少ない手順で行うか」になってくる。
xyzzy なら、置換前文字列を入力する際に ―― ミニバッファ上に何かを入力しようとした際に、Homeキーを押すことで、バッファ上のカーソル位置の単語が順次ミニバッファへコピーされる。実に快適。少し調べてみたが、lisp/minibuf.l で、minibuffer-copy-word という関数が定義されていて、それが Home に割り当てられている模様。
さて、これと似たようなことを emacs でやるにはどうしたらよいのか。検索してみたが、そういう機能があるという話は見かけなかった。
一応、手作業でやれなくはない。
- 文字列をリージョンで選択して、
- M-wを押してコピーして、
- C-x C-x でコピーした文字列の先頭までカーソルを移動して、
- 置換を呼んで、
- C-y で貼り付けして、
もう少し減らすこともできる。
- 置換を呼んで、
- M-/ でdabbrev(単語補完)を使ってバッファ上に存在する文字列の一部を打ち込んで文字列を選択。
◎ 置換とは何ぞや。 :
このあたり、色々考えるべき点があるような気もする。
例えば。xyzzy と emacs は、「順番」が違う。
また、リージョン(選択範囲)を、何の指定として用いるかという問題も。
置換処理は、要求される項目がある。
…てな感じでモヤモヤと考えていたのだけど。そもそも置換を行う場面ってのは、一体どれだけあるのだろう…。頻繁に行うなら、手順を少なくすることが作業効率の改善に繋がるが、置換ってのはそう頻繁に行うことでもないような…。とっぴんぱらりのぷぅ。
例えば。xyzzy と emacs は、「順番」が違う。
- 置換を呼んで、置換前文字列をコピー・貼り付けする。(xyzzy)
- 置換前文字列をコピーして、置換を呼んで、貼り付けする。(emacs)
また、リージョン(選択範囲)を、何の指定として用いるかという問題も。
- リージョン範囲に対して置換はできない。(xyzzy) ―― その場合はあらかじめ narrow-to-region を使って対象範囲を「事前に用意」しておく。
- リージョン範囲だけを置換できる。(emacs)
置換処理は、要求される項目がある。
- 処理を行う範囲
- 置換前文字列
- 置換後文字列
…てな感じでモヤモヤと考えていたのだけど。そもそも置換を行う場面ってのは、一体どれだけあるのだろう…。頻繁に行うなら、手順を少なくすることが作業効率の改善に繋がるが、置換ってのはそう頻繁に行うことでもないような…。とっぴんぱらりのぷぅ。
◎ isearch利用時のソレをメモ。 :
なんだか忘れてしまっていたのでメモ。C-sを押すと、isearch が使えるけれど、その直後 C-w を押すとカーソル位置の単語を取得して検索ができる。xyzzy も emacs も同じ。たしかそのはず。
検索時には、バッファ上の文字列をコピーすることの便利さにちゃんと気付いていたのに。なぜ置換時も便利だと気付かなかったんだろう…。>emacs。
検索時には、バッファ上の文字列をコピーすることの便利さにちゃんと気付いていたのに。なぜ置換時も便利だと気付かなかったんだろう…。>emacs。
[ ツッコむ ]
以上です。